微服务将单体服务拆开,代码也自然分离。 此文为多仓库模式( Multirepo) : 一个服务在一个目录
采用gRPC协议 gRPC是一个由 Google 开发的远程过程调用(RPC)框架,基于HTTP/2。它使用 Protobuf 作为默认的序列化格式。
Protobuf 是 Google 设计的数据序列化格式,用于结构化数据的序列化和反序列化。使用 .proto 文件定义消息结构,然后通过编译器生成相应语言的代码。
一: 环境准备
执行命令安装插件:
go install google.golang.org/protobuf/cmd/protoc–gen–go@latest
go install google.golang.org/grpc/cmd/protoc–gen–go–grpc@latest
//go get 和 go install 命令的使用场景:
– 当你需要获取一个包的源代码并可能需要对其进行修改时,使用 go get。
– 当你需要编译并安装一个包,以便使用它的可执行文件或库文件时,使用 go install。
Proto文件编译及相关插件简介 – 主要工具
命令示例
protoc –go_out=. –go-grpc_out=. *.proto
–go_out=. 其中的. 是你要编译的 .proto 文件目录为当前目录,按需修改 –go-grpc_out=. 其中的. 是你生成 .pb.go 文件的目录,按需修改 *.proto 其中的 * 是编译当前目录下的所有 .proto 文件,也可以单独指定为 xxx.proto 文件
1: protoc 安装
- https://github.com/protocolbuffers/protobuf/tags
- go env -w GOOS=windows(设置完之后,记得还原)
- 复制bin目录下的protoc.exe文件到 $GOBIN 目录下
- 注意:GOBIN 为 $GOPATH/bin,如果你的 $GOPATH 不在 $PATH 中,你需要将其添加到 $PATH 中
- 验证 protoc –version
2: protoc-gen-go 安装
- https://github.com/protocolbuffers/protobuf-go/tags
- 配置环境变量同上
- 然后验证: protoc-gen-go –version
- 或 安装方法二: go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.36.6
3: protoc-gen-go-grpc 安装
- 确认环境变量中包含了GOPATH和GOBIN
- 执行命令go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.5.1安装会自动放到GOBIN下protoc-gen-go-grpc.exe
- 验证: protoc-gen-go-grpc –version
- 如果下载失败,可以考虑开启代理go env -w GOPROXY=https://goproxy.cn,direct
- 或查看所有可用版本go list -m -versions google.golang.org/grpc/cmd/protoc-gen-go-grpc
- 或查看所有可用版本 https://pkg.go.dev/google.golang.org/grpc/cmd/protoc-gen-go-grpc?tab=versions
4: etcd 安装
下载安装: https://github.com/etcd-io/etcd/tags 其中etcd.exe是服务端,etcdctl.exe是客户端 环境变量 验证: etcd –version 如果不习惯命令行,可以下载客户端,etcd客户端的下载地址 https://github.com/gtamas/etcdmanager/releases etcd 是一个分布式键值存储系统,常用于分布式系统中的服务发现。安装它有多种方式,这里贴出 docker-compose.yaml文件用作参考。
version: "3.7"
services:
etcd:
image: "bitnami/etcd:3.5"
container_name: "etcd"
restart: "always"
ports:
– 2379:2379
environment:
– TZ=Asia/Shanghai
– ALLOW_NONE_AUTHENTICATION=yes
如果安装成功,在浏览器访问 http://IP:2379/version,会出现以下信息:{"etcdserver": "3.5.17","etcdcluster": "3.5.0"} etcd 更多学习: https://oldme.net/article/32
5: 数据库 安装 – 此处省略
二: 项目部分
1. 项目初始化
//初始化一个名为proxima的Monorepo仓库
1. gf init proxima –m
2. 修改 go.mod 文件的go版本号为当前版本,例: go 1.23.4
3. cd proxima
4. gf up
5. rm app/*
完成后的项目结构:
app
hack
hack.mk
hack-cli.mk
utility
go.mod
go.sum
安装微服务组件
安装grpcx组件,让GoFrame支持微服务开发。
go get –u github.com/gogf/gf/contrib/rpc/grpcx/v2
安装数据库驱动
go get –u github.com/gogf/gf/contrib/drivers/mysql/v2
安装etcd组件
go get –u github.com/gogf/gf/contrib/registry/etcd/v2
建立微服务
建立名为user的微服务,并保存在app目录下
gf init app/user –a
将下列文件全部删除,留下一个空白的环境。 /*
app/user/api/*
app/user/internal/controller/*
app/user/internal/cmd/cmd.go
正式开发
gfcli:
gen:
dao:
– link: "mysql:root:123456@tcp(srv.com:3306)/user"
descriptionTag: true
pbentity:
– link: "mysql:root:12345678@tcp(srv.com:3306)/user"
pbentity 与 gen dao 的差别:
- gen dao 生成的数据是go文件,主要在微服务内部使用,例如ORM操作;
- gen pbentity生成的数据是proto文件,主要用作gRPC微服务之间的通讯。
业务逻辑开发
微服务的业务逻辑存放在*/internal/logic下,和单体业务一样。 app/user/internal/logic/account/account.go
评论前必须登录!
注册