如何 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"));
}
我有一个场景,我必须定期调用 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"));
}