.NET Core中提供了开箱即用的运行状况检查,首先,我将在.NET Core API应用程序中执行运行状况检查,接下来,我们将使用DbContext集成SQL Server或数据库的运行状况检查,最后是如何实现自定义服务的运行状况检查。

在ASP.NET Core中实现健康检查

要实现运行状况检查,您需要在项目中安装 Microsoft.AspNetCore.Diagnostics.HealthChecks

接下来,在ConfigureServices方法中添加运行状况检查中间件。

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

然后修改Configure方法,使用中间件:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapHealthChecks("/health");
});
}

现在,准备工作完成,运行程序然后访问 /health, 您将看到下边结果:

HealthCheckService

.NET Core提供了一个HealthCheckService类,我们可以把健康检查的放到我们的控制器中,就像这样:

public class HealthController : ControllerBase
{
private readonly ILogger<HealthController> _logger;
private readonly HealthCheckService _healthCheckService;
public HealthController(ILogger<HealthController> logger,
HealthCheckService healthCheckService)
{
_healthCheckService = healthCheckService;
_logger = logger;
} [HttpGet]
public async Task<IActionResult> Get()
{
var report = await _healthCheckService.CheckHealthAsync(); return report.Status == HealthStatus.Healthy ? Ok(report) :
StatusCode((int)HttpStatusCode.ServiceUnavailable, report);
}
}

现在,如果您尝试访问/health,您将看到相同的结果。

接下来,我们将实现数据库运行状态检查:

EntityFramework Core 健康检查

首先,还是需要安装Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore到我们的项目中。

接下来,我们拿到数据库上下文,然后修改代码:

public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddApiVersioning();
}

然后,运行程序,现在访问 /health 返回的结果是这样:

IHealthCheck

一些情况下,默认的健康检查可能不满足我们的需求,那么可以继承 IHealthCheck 接口,自定义我们的健康检查的逻辑。

public class ApiHealthCheck : IHealthCheck
{
private readonly IHttpClientFactory _httpClientFactory; public ApiHealthCheck(IHttpClientFactory httpClientFactory)
{
_httpClientFactory = httpClientFactory;
}
public async Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context,
CancellationToken cancellationToken = default)
{
using (var httpClient = _httpClientFactory.CreateClient())
{
var response = await httpClient.GetAsync("https://your-api-service.endpoint");
if (response.IsSuccessStatusCode)
{
return HealthCheckResult.Healthy($"API is running.");
} return HealthCheckResult.Unhealthy("API is not running");
}
}
}

然后修改代码如下:

public void ConfigureServices(IServiceCollection services)
{
services.AddHealthChecks()
.AddDbContextCheck<WeatherForecastDbContext>()
.AddCheck<ApiHealthCheck>("ApiHealth");
services.AddControllers();
}

然后,运行程序,访问 /health,结果如下:

原文作者: Anuraj

原文链接: https://dotnetthoughts.net/implementing-health-check-aspnetcore/

最后

欢迎扫码关注我们的公众号 【全球技术精选】,专注国外优秀博客的翻译和开源项目分享,也可以添加QQ群 897216102

最新文章

  1. Android Weekly Notes Issue #231
  2. 分布式搜索引擎Elasticsearch性能优化与配置
  3. JVM 平台上的各种语言的开发指南
  4. HT图形组件设计之道(四)
  5. 解决:[INS-20802] Oracle Net Configuration Assistant failed
  6. greenDao 3.0基础
  7. iOS 网络编程:AFNetworking
  8. protocolbuffer数据交换格式说明
  9. jsp截取字符串
  10. Android UI 学习 自定义的布局 平滑移动 VelocityTracker()
  11. Appium0.18.x迁移到Appium1.x须知事项
  12. docker私服
  13. 用CSS让文字居于div的底部
  14. java基础学习总结——java读取properties文件总结
  15. eclipse:An internal error occurred during: &quot;Build Project&quot;. GC overhead limit exceeded
  16. 第九篇:Map/Reduce 工作机制分析 - 作业的执行流程
  17. 迭代器模式 Iterator 行为型 设计模式(二十)
  18. 28-30 js 文本全选
  19. openERP笔记 自定义模块开发
  20. Docker 记一次容器内部修改宿主机挂载目录用户权限后宿主机目录变化

热门文章

  1. Ubuntu16.04网卡配置
  2. Python之word文档替换字符串(也可以用于短模板套用)
  3. python初学者-从小到大排序
  4. IQueryable的简单封装
  5. DRF视图的使用及源码流程分析
  6. harbor安装实操笔记
  7. 对CAS中atomicInteger实现的思考
  8. Linux命令整理,用户管理,用户组管理,系统管理,目录管理常用命令
  9. LinkedList 的 API 与数据结构
  10. 【Redis3.0.x】配置文件