micro提供有基于Go的gRPC插件,该插件可以在内部集成gPRC,并与之无缝交互,让开发gRPC更简单,并支持grpc-gateway。
micro有面向gRPC的和服务端插件,go-grpc库调用客户端/服务端插件生成micro需要的gRPC代码,而客户端/服务端插件都是从扩展而来,也即是说,我们不需要去知道go-micro是如何编解码或传输节点就可以使用原生的gRPC。
示例
我们提供了一个简单的节点Greeter问候程序来演示对gRPC的支持:examples/greeter。
我们需要使用Protobuf来生成代码,请根据您的环境参考安装。
服务发现
服务发现负责把服务名到服务所在地址。
micro默认使用 作为服务发现的注册中心。您可以查考install guide安装。
发现机制是可插拔的,我们目前支持使用etcd、kubernetes、zookeeper等等,具体详见。
组播,Multicast DNS已经内置在micro中,mDNS不需要依赖任何注册中心,可以在一般情况下的局域网中使用。
在micro服务的任意启动指令中传入或者声明环境变量MICRO_REGISTRY=mdns
也可,比如:
package main
import (
"time"
"github.com/micro/go-grpc"
"github.com/micro/go-micro"
)
type Say struct{}
func (s *Say) Hello(ctx context.Context, req *hello.Request, rsp *hello.Response) error {
rsp.Msg = "Hello " + req.Name
return nil
}
service := grpc.NewService(
)
service.Init()
hello.RegisterSayHandler(service.Server(), new(Say))
if err := service.Run(); err != nil {
log.Fatal(err)
}
}
使用Micro
您可能需要使用micro的工具集编写grpc服务,micro支持使用工具集预构建或者简单把grpc的客户端插件导入项目中重新编译构建即可。
go get github.com/micro/micro
在main.go目录创建plugins.go文件,专门引入插件
重新编译二进制
使用插件
Go-grpc与gRPC生态是无缝集成的,所以grpc-gateway使用没特别之处。