折騰了一段時間,現在終于對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、服務調用測試