You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C++中使用gRPC健康检查协议监控特定服务的健康状态?

默认健康检查服务(空字符串服务)的状态逻辑

调用grpc::EnableDefaultHealthCheckService(true)开启的是空字符串名称的健康检查服务,它的状态规则很直接:

  • 服务器启动完成且未手动干预状态时,默认返回SERVING
  • 一旦调用健康检查服务的状态变更API(比如SetServingStatus)修改空字符串服务的状态,返回值会随之更新
  • 当服务器调用Shutdown()开始关闭流程时,该默认服务会自动切换为NOT_SERVING状态
为自定义服务添加健康检查的简便方法

直接通过grpc::health::CreateHealthCheckService()创建实例并手动管理状态,是给自定义服务添加健康检查的清晰方式,示例代码如下:

1. 构建服务器时注册健康检查服务

#include <grpcpp/grpcpp.h>
#include <grpcpp/ext/health_check_service.h>

// 假设你的自定义服务实现
class MyServiceImpl final : public MyService::Service {
  // ... 服务方法实现
};

int main() {
  MyServiceImpl my_service;

  // 创建健康检查服务实例
  auto health_service = grpc::health::CreateHealthCheckService();

  grpc::ServerBuilder builder;
  // 注册自定义服务
  builder.RegisterService(&my_service);
  // 注册健康检查服务
  builder.RegisterService(health_service.get());

  // 启动服务器
  std::unique_ptr<grpc::Server> server = builder.BuildAndStart();

2. 手动控制自定义服务的健康状态

在你的服务逻辑中,根据业务状态更新健康检查状态:

// 当自定义服务就绪时,设置为SERVING
health_service->SetServingStatus("MyService", grpc::health::HealthCheckService::ServingStatus::SERVING);

// 当服务出现故障或需要下线时,设置为NOT_SERVING
health_service->SetServingStatus("MyService", grpc::health::HealthCheckService::ServingStatus::NOT_SERVING);

注意事项

  • 这里的"MyService"必须和你proto文件中定义的服务名称完全一致(区分大小写)
  • 如果需要同时保留默认空字符串服务的健康检查,只需在构建ServerBuilder时额外调用grpc::EnableDefaultHealthCheckService(true)即可

内容的提问来源于stack exchange,提问作者TheImpressiveDonut

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 20:52:12