【问题标题】:How to implement go grpc-go health check?go grpc-go 健康检查如何实现?
【发布时间】:2019-12-16 08:27:30
【问题描述】:

我正在寻找grpc-go 健康检查的文档和代码示例。

寻找问题

没有明确的答案可用于在我的程序中实施健康检查。

【问题讨论】:

    标签: go grpc grpc-go


    【解决方案1】:

    我建议您查看Github project,以了解如何构建一个为生产准备的 gRPC 服务,其中包括健康检查等等。

    具体到健康检查你可以检查它是如何完成的here

    图书馆利用这个更专注的project

    如果你不想使用这个库,你可以像这样实现健康检查:

    import (
        "google.golang.org/grpc/health"
        "google.golang.org/grpc/health/grpc_health_v1"
    )
    grpcServer := grpc.NewServer()
    grpc_health_v1.RegisterHealthServer(grpcServer, health.NewServer())
    

    【讨论】:

      【解决方案2】:

      您发布的其中一个链接有一个链接,请阅读我: https://github.com/grpc/grpc/blob/master/doc/health-checking.md

      您现在应该实现该逻辑,并在您的服务集中注册该服务。

      自述文件建议手动将服务注册到健康检查服务中,因此您可以将服务列表作为参数传递来创建健康检查服务。

      我建议为您的服务定义一个接口,以便健康检查服务可以以相同的方式处理所有这些:

      type HealthMeter interface {
          GetHealth() mysample.HealthCheckResponse_ServingStatus
          WatchHealth() <- chan mysample.HealthCheckResponse_ServingStatus
      }
      
      // implement service "A" and "B" as both interfaces (gRPC server AND HealthMeter)
      
      grpcServer := grpc.NewServer()
      srvA := servers.NewServiceA()
      srvB := servers.NewServiceB()
      healthSrv := servers.NewHealthCheckServer(map[string]servers.HealthMeter{
          "serviceA": srvA,
          "serviceB": srvB,
      })
      
      mysample.RegisterServiceAServer(grpcServer, srvA)
      mysample.RegisterServiceBServer(grpcServer, srvB)
      mysample.RegisterHealthServer(grpcServer, healthSrv)
      

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 2021-10-23
        • 2019-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-22
        • 1970-01-01
        • 2018-08-30
        • 2019-09-24
        相关资源
        最近更新 更多