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也可,比如:

  1. package main
  2. import (
  3. "time"
  4. "github.com/micro/go-grpc"
  5. "github.com/micro/go-micro"
  6. )
  7. type Say struct{}
  8. func (s *Say) Hello(ctx context.Context, req *hello.Request, rsp *hello.Response) error {
  9. rsp.Msg = "Hello " + req.Name
  10. return nil
  11. }
  12. service := grpc.NewService(
  13. )
  14. service.Init()
  15. hello.RegisterSayHandler(service.Server(), new(Say))
  16. if err := service.Run(); err != nil {
  17. log.Fatal(err)
  18. }
  19. }

使用Micro

您可能需要使用micro的工具集编写grpc服务,micro支持使用工具集预构建或者简单把grpc的客户端插件导入项目中重新编译构建即可。

  1. go get github.com/micro/micro

在main.go目录创建plugins.go文件,专门引入插件

重新编译二进制

使用插件

Go-grpc与gRPC生态是无缝集成的,所以grpc-gateway使用没特别之处。