如何实施grpc-go健康检查?

时间:2019-12-16 08:27:30

标签: go grpc grpc-go

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

寻找问题

没有明确的答案,我可以在自己的程序中使用它来执行运行状况检查。

2 个答案:

答案 0 :(得分: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())

答案 1 :(得分:0)

您发布的链接之一具有指向我的链接: 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)

我希望它能对您有所帮助。