折腾了一段时间,现在终于对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、服务调用测试