02 go-zero入门--微服务单组demo
参考文档:
https://go-zero.dev/docs/tutorials/proto/spec
视频地址:
https://space.bilibili.com/387126464/channel/series
编写roles.proto 描述文件
cd /d/code/go/src/go-zero/go-mindoc/roles/rpc/pb-desc/roles.proto
创建 /d/code/go/src/go-zero/go-mindoc/roles/rpc/pb-desc/roles.proto 文件
syntax = "proto3";
package role;
///pb-desc/types/role/roles.pb.go 和types/role/roles_grpc.pb.go 和包名
option go_package = "./role";
message IdReq{
int64 id = 1;
}
message RolesInfoReply{
int64 id = 1;
string name = 2;
}
//对外暴露的方法包名 如果和go_package同名会在加roleclient做区分 如 roleclient
service role {
rpc getRoles(IdReq) returns(RolesInfoReply);
}
生成服务代码
生成单服务
goctl rpc protoc roles.proto --go_out=./types --go-grpc_out=./types --zrpc_out=../ --style go_zero
查看生成的文件目录
Administrator@haima-PC MINGW64 /d/code/go/src/go-zero/go-mindoc/roles/rpc/pb-desc
$ cd ..
Administrator@haima-PC MINGW64 /d/code/go/src/go-zero/go-mindoc/roles/rpc
$ tree
.
|-- etc
| `-- roles.yaml
|-- internal
| |-- config
| | `-- config.go
| |-- logic
| | `-- get_roles_logic.go
| |-- server
| | `-- roles_server.go
|-- pb-desc
| |-- roles.proto
| `-- types
| `-- roles
| |-- roles.pb.go
| `-- roles_grpc.pb.go
|-- roles.go
`-- rolesclient
`-- roles.go
10 directories, 10 files
下载依赖
$ cd /d/code/go/src/go-zero/go-mindoc/roles/rpc
$ go mod tidy
api和rpc服务连接的方式
-
直连
- Endpoints多节点直连模式
- Target 地址解析模式
-
注册发现
- etcd
- nacos
- consul
-
原生支持
如果是etcd方式和api通信,需要安装etcde服务,否则启动时会报错
搭建 ETCD 环境
- 命令行启动
# 参考如下,使用Docker安装ETCD
docker run -d --name Etcd-server \
--network app-tier \
--publish 2379:2379 \
--publish 2380:2380 \
--env ALLOW_NONE_AUTHENTICATION=yes \
--env ETCD_ADVERTISE_CLIENT_URLS=http://etcd-server:2379 \
bitnami/etcd:latest
-
docker-compose 方式启动
以下以Endpoints方式通信方式启动服务
用Endpoints方式调用rpc服务
a. 注释 roles/rpc/etc/roles.yaml
配置中的代码
#Etcd:
# Hosts:
# - 127.0.0.1:2379
# Key: roles.rpc
b. api配置里使用Endpoints调用rpc服务
#rpc service
UserRpcConf:
Endpoints:
- 127.0.0.1:8080
NonBlock: true
$ go run roles.go -f etc/roles.yaml
Starting rpc server at 127.0.0.1:8080...
流程图:
[Haima的博客]
http://www.cnblogs.com/haima/