gRPC服务

Example

项目地址gRPC服务 - 图1 (opens new window)

HTTP配置

  1. type Config struct {
  2. Host string // IP地址,默认0.0.0.0
  3. Port int // Port端口,默认9002
  4. Deployment string // 部署区域
  5. Network string // 网络类型,默认tcp4
  6. EnableMetricInterceptor bool // 是否开启监控,默认开启
  7. EnableTraceInterceptor bool // 是否开启链路追踪,默认开启
  8. SlowLogThreshold time.Duration // 服务慢日志,默认500ms
  9. EnableAccessInterceptorReq bool // 是否开启记录请求参数,默认不开启
  10. EnableAccessInterceptorRes bool // 是否开启记录响应参数,默认不开启
  11. EnableLocalMainIP bool // 自动获取ip地址
  12. }

用户配置

  1. [server.grpc]
  2. host = "127.0.0.1"
  3. port = 9002

用户代码

配置创建一个 grpc 的配置项,其中内容按照上文配置进行填写。以上这个示例里这个配置key是server.grpc

代码中创建一个 gRPC 服务, egrpc.Load(“”).Build(),代码中的 key 和配置中的 key 要保持一致。创建完 gRPC 服务后, 将他添加到 ego new 出来应用的 Serve 方法中,之后使用的方法和 gRPC 就完全一致。

  1. package main
  2. import (
  3. "context"
  4. "github.com/gotomicro/ego"
  5. "github.com/gotomicro/ego/core/elog"
  6. "github.com/gotomicro/ego/server"
  7. "github.com/gotomicro/ego/server/egrpc"
  8. "google.golang.org/grpc/examples/helloworld/helloworld"
  9. )
  10. // export EGO_DEBUG=true && go run main.go --config=config.toml
  11. func main() {
  12. if err := ego.New().Serve(func() server.Server {
  13. server := egrpc.Load("server.grpc").Build()
  14. helloworld.RegisterGreeterServer(server.Server, &Greeter{})
  15. return server
  16. }()).Run(); err != nil {
  17. elog.Panic("startup", elog.Any("err", err))
  18. }
  19. }
  20. type Greeter struct {
  21. server *egrpc.Component
  22. }
  23. func (g Greeter) SayHello(context context.Context, request *helloworld.HelloRequest) (*helloworld.HelloReply, error) {
  24. return &helloworld.HelloReply{
  25. Message: "Hello EGO, I'm " + g.server.Address(),
  26. }, nil
  27. }