如何 API 定期接收 Asp.net Core 中的服务健康状态

How to an API periodically to receive service health status in Asp.net Core

我有一个场景,我必须定期调用 API 来接收健康状况。

如果我用一段时间会怎样?

 while (true)
  {
// API call
   var health = _client.GetHealth(1).Result;
   if (health)
     {
       some other work

     }
   Thread.Sleep(2000);
  }

你可以使用异步编程,

public async Task HealthCheckAsync()
{
 while (true)
  {
// API call
   var health = await _client.GetHealth(1);
   if (health)
     {
       some other work

     }
    await Task.Delay(2000);
  }
}

除了在等待服务器响应或等待下一个周期时不会阻塞主线程外,它的工作方式相同。

这已经可以通过 Health Checks middleware 获得。健康检查服务会定期检查注册的探测器,看看是否一切正常。可以通过 API 端点记录或公开健康状态。

有多种探测可用。开源 AspNetCore.Diagnostics.HealthChecks 库提供从远程 API 到各种数据库产品、云服务等的所有内容。它还提供了一个健康检查仪表板,显示详细的健康检查历史记录。

使用健康检查很容易,因为它已包含在 Web 应用程序模板中。

注册它需要在 Startup.cs 中添加以下内容:

public void ConfigureServices(IServiceCollection services)
{
    services.AddHealthChecks();
}

public void Configure(IApplicationBuilder app)
{
    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapHealthChecks("/health");
    });
}

MapHealthChecks/health 端点公开基本状态。要检查远程 API,您可以添加 AspNetCore.HealthChecks.Uris 包并使用 AddUrlGroup 重载之一:

public void ConfigureServices(IServiceCollection services)
{
    services.AddHealthChecks()
            .AddUrlGroup(new Uri("http://httpbin.org/status/200"));
}