新建项目 目录结构为
1. 编写Models.proto(模型)和ProdServices.proto(定义传输接受的数据)
Models.proto
syntax = "proto3";
package Services;
option go_package= "../Services";
// 商品模型
message ProdModel {
// @inject_tag: json:"pid"
int32 ProdID = 1;
// @inject_tag: json:"pName"
string ProdName = 2;
}
ProdServices.proto
syntax = "proto3";
package Services;
option go_package= "../Services";
import "Models.proto";
message ProdRequest {
int32 size =1;
}
message ProdListResponse {
repeated ProdModel data = 1;
}
service ProdService {
rpc GetProdList(ProdRequest) returns(ProdListResponse);
}
2. 使用gen.bat 生成Services目录下的四个go文件
cd Services/protos
protoc --micro_out=.. --micro_opt=paths=source_relative Models.proto
protoc --micro_out=.. --micro_opt=paths=source_relative ProdServices.proto
protoc --go_out=.. --go_opt=paths=source_relative Models.proto
protoc --go_out=.. --go_opt=paths=source_relative ProdServices.proto
cd..
protoc-go-inject-tag -input="Models.pb.go"
cd..
3. 编写 main 文件
package main
import (
"gitee.com/Hind3ight/easy-go-micro/micro-project/ServiceLmpl"
"gitee.com/Hind3ight/easy-go-micro/micro-project/Services"
"github.com/micro/go-micro"
"github.com/micro/go-micro/registry"
"github.com/micro/go-plugins/registry/consul"
)
func main() {
consulReg := consul.NewRegistry(
registry.Addrs("192.168.31.246:8500"))
prodService := micro.NewService(
micro.Name("prodService"),
micro.Address(":8081"),
micro.Registry(consulReg),
)
prodService.Init()
Services.RegisterProdServiceHandler(prodService.Server(), new(ServiceLmpl.ProdService))
prodService.Run()
}
可能遇到的问题:panic: qtls.ConnectionState not compatible with tls.ConnectionState
这是不兼容的问题,可更换go的版本,这里使用了go 1.12
注意:更改版本不是在idea中切换sdk,或者更改gomod文件,而是下载好go 1.12并更改系统变量。