我正在使用微服务(多个服务)并希望拥有 HealthCheck 服务,我可以调用该服务并获取所有正在运行的服务的运行状况。我不想为每个服务触发健康检查。这个想法是通过 GRPC 获取每个服务的健康状况。
我的一项服务有:
'''
services.AddHealthChecks()
.AddCheck("Ping", () => HealthCheckResult.Healthy("Ping 正常!"), tags: new[] { "ping_tag"}).AddDbContextCheck(name: "My DB");
'''
当我的 GRPC 端点在此服务中被调用并获得结果时,如何通过代码运行健康检查。
最佳答案
当services.AddHealthChecks()
被调用,一个 Microsoft.Extensions.Diagnostics.HealthChecks.HealthCheckService
的实例被添加到容器中。您可以使用依赖注入(inject)访问此实例并调用 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
}
}
关于asp.net-core - 在asp net core中通过代码触发健康检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61932293/