4

我正在使用微服务(多个服务)并希望拥有可以调用的 HealthCheck 服务并获取所有正在运行的服务的运行状况。我不想为每个服务触发运行状况检查。这个想法是通过 GRPC 获得每个服务的运行状况。

我的一项服务有:

''' services.AddHealthChecks() .AddCheck("Ping", () => HealthCheckResult.Healthy("Ping is OK!"), tags: new[] { "ping_tag" }).AddDbContextCheck(name: "My DB "); '''

在此服务中调用我的 GRPC 端点并获取结果时,如何通过代码运行运行状况检查。

4

1 回答 1

4

services.AddHealthChecks()被调用时,一个实例Microsoft.Extensions.Diagnostics.HealthChecks.HealthCheckService被添加到容器中。您可以使用依赖注入访问此实例并调用CheckHealthAsync以生成将使用已注册的健康检查的健康报告。

在我的项目中,当收到 MassTransit 事件时,我需要执行健康检查:

public class HealthCheckQueryEventConsumer : IConsumer<IHealthCheckQueryEvent>
{
    private readonly HealthCheckService myHealthCheckService;   
    public HealthCheckQueryEventConsumer(HealthCheckService healthCheckService)
    {
        myHealthCheckService = healthCheckService;
    }

    public async Task Consume(ConsumeContext<IHealthCheckQueryEvent> context)
    {
        HealthReport report = await myHealthCheckService.CheckHealthAsync();
        string response = JsonSerializer.Serialize(report);
        // Send response
    }
}
于 2020-12-16T06:37:33.280 回答