asp.net-core - 在asp net core中通过代码触发健康检查

标签 asp.net-core health-check grpc-dotnet

我正在使用微服务(多个服务)并希望拥有 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/

相关文章:

debugging - Visual Studio Code 未在 OS X 上加载符号

authentication - 如何将 Azure OpenIdConnect OWIN 中间件 Cookie 身份验证转换为 JavaScript JWT 以用于 SPA 应用程序?

azure - 配置 Azure 应用程序网关以从 Azure 存储容器提供静态网站服务

c# - gRPC 服务器 .net 框架 - 如何配置使用 TLS 证书

protocol-buffers - 使用基于 Java 的 Grpc 服务器和基于 C# 的客户端时传输失败错误

c# - Properties.Settings 在 ASP.NET Core 中不可用

c# - 隐藏 ASP.NET Core WebHost 消息

docker-compose 健康检查重试频率 != 间隔

Azure 前门 - 确定哪个源不可用

asp.net-core - protobuf-net.grpc 客户端和 .NET Core 的 gRPC 客户端工厂集成