折腾了一段时间,现在终于对mirco有点了解了,于是就记录下mirco新建proto的流程
1、新建服务
micro new --type "srv" 项目路径
如:micro new --type "srv" sss/GetImageCd
接下来会输出一堆东西,记录下这两行,待会儿会用到
2、进入到proto目录,编写protobuf数据格式
如果不想用默认方法,可以把这个Call改成自己想要的方法名
定义好Request和Response后,执行之前记录下来的那两行命令
cd /opt/golangProject/src/sss/GetImageCd
protoc --proto_path=.:$GOPATH/src --go_out=. --micro_out=. proto/GetImageCd/GetImageCd.proto
执行成功后,会生成两个文件
3、在新建的服务的根目录下,执行go mod init(没有用go moudle管理的话,可以忽略3,4步)
修改go.mod,新加这两行,不然的话无法调用
4、进入到proto目录,执行go mod init,如果不执行这步,那么web端将无法调用服务端的protobuf
5、如果遇到proto与服务定义的结构体冲突了的话,那么取另一个名就好了,然后对应修改下面的文件
别名冲突
修改为
对应修改下面的文件
src/sss/GetImageCd/handler/GetImageCd.go
src/sss/GetImageCd/subscriber/GetImageCd.go
其实就是在服务根目录下,这些方法对应的调用文件
6、编译服务
go build main.go
编译的时候,会出现以下报错
# github.com/coreos/etcd/clientv3/balancer/picker
../../pkg/mod/github.com/coreos/etcd@v3.3.17+incompatible/clientv3/balancer/picker/err.go:37:44: undefined: balancer.PickOptions
../../pkg/mod/github.com/coreos/etcd@v3.3.17+incompatible/clientv3/balancer/picker/roundrobin_balanced.go:55:54: undefined: balancer.PickOptions
# github.com/coreos/etcd/clientv3/balancer/resolver/endpoint
../../pkg/mod/github.com/coreos/etcd@v3.3.17+incompatible/clientv3/balancer/resolver/endpoint/endpoint.go:114:78: undefined: resolver.BuildOption
../../pkg/mod/github.com/coreos/etcd@v3.3.17+incompatible/clientv3/balancer/resolver/endpoint/endpoint.go:182:31: undefined: resolver.ResolveNowOption
原因 grpc版本不对
解决方法
go mod edit -require=google.golang.org/grpc@v1.26.0
go get -u -x google.golang.org/grpc@v1.26.0
7、服务调用测试