pubsub - gRPC message-oriented middleware on top of message-bus, event ingestion and delivery system.
https://github.com/vardius/pubsub

pushpull - gRPC event-oriented middleware on top of worker-pool, event ingestion and delivery system.
pushpull allows you to push event to queue that later can be pulled by one of clients pulling from that queue. See also pubsub.
https://github.com/vardius/pushpull

grpc example
https://github.com/grpc/grpc-go/tree/master/examples

grpc auth
https://github.com/grpc/grpc-go/blob/master/examples/features/authentication

grpc debug
https://github.com/grpc/grpc-experiments/tree/master/gdebug

grpoc channelz
https://github.com/rantav/go-grpc-channelz

  1. import (
  2. "google.golang.org/grpc"
  3. channelzservice "google.golang.org/grpc/channelz/service"
  4. channelz "github.com/rantav/go-grpc-channelz"
  5. )
  6. grpcServer := grpc.NewServer()
  7. // Register the channelz handler
  8. http.Handle("/", channelz.CreateHandler("/foo", grpcBindAddress))
  9. // Register the channelz gRPC service to grpcServer so that we can query it for this service.
  10. channelzservice.RegisterChannelzServiceToServer(grpcServer)
  11. // Listen and serve HTTP for the default serve mux
  12. adminListener, err := net.Listen("tcp", ":8081")
  13. if err != nil {
  14. log.Fatal(err)
  15. }
  16. go http.Serve(adminListener, nil)

gRPC 协议,简单来说就是 http2 协议的基础之上,增加了特定的协议 header:“grpc-” 开头的 header 字段,采用特定的打解包工具(protobuf)对数据进行序列化,从而实现 RPC 调用。

grpc - 图1

gRPC 一次基于 HTTP2 的 unary rpc 调用传输主要流程如下:

  • client 发送 Magic 信息:
    PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n;
  • server 收到并检查是否正确;
  • client 和 server 互相发送 setting 帧,收到后发送 ACK 确认;
  • client 发送 Header 帧,包含 gRPC 协议字段,以 End Headers 作为 Header 结束标志;
  • client 紧接着发送 Data 帧,包含 RPC 调用的 request 信息,以 End Stream 作为 Data 结束标志;
  • server 调用函数获得结果;
  • server 发送 Header 帧,包含 gRPC 协议字段,以 End Headers 作为 Header 结束标志;
  • server 紧接着发送 Data 帧,包含 RPC 调用回传的 response 信息;
  • server 紧接着再次发送 Header 帧,包含 RPC 状态和 message 信息,以 End Stream 作为本次 RPC 调用结束标志。

其中包含 gRPC 调用信息的 HTTP2 Header 帧如下图:
grpc - 图2
另外,在 gRPC 的 stream 调用中,可在 server 端回传的过程中发送多次 Data,调用结束后再发送 Header 终止 RPC 过程,并汇报状态信息。
image.png
dubbogo 3.0 目前是社区和 dubbo 官方团队— 阿里中间件团队共同合作开发。

阿里云-中间件团队招募对 dubbo3 (java & go)、dapr、arthas 有兴趣的开发者。可以钉钉联系 northlatitude,或者发送邮件至 beiwei.ly@alibaba-inc.com。

作者简介

李志信 (GitHubID LaurenceLiZhixin),阿里云云原生中间件团队开发工程师,dubbogo 社区开发者,中山大学软件工程专业在校学生,擅长使用 Go 语言,专注于云原生和微服务等技术方向。
于雨(github @AlexStocks),dubbo-go 项目和社区负责人,一个有十多年服务端做着基础架构研发一线工作经验的程序员,陆续参与改进过 Muduo/Pika/Dubbo/Sentinel-go 等知名项目,目前在蚂蚁金服可信原生部从事容器编排和 service mesh 工作。

https://github.com/fullstorydev/grpcui

https://github.com/rogchap/wombat
https://github.com/rogchap/wombat/tree/master/frontend/src

https://github.com/rogchap/v8go