在.NET Core 中实现健康检查
2021-01-24 21:58
260 查看
.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,结果如下:
ad8 原文作者: Anuraj
原文链接: https://dotnetthoughts.net/implementing-health-check-aspnetcore/
相关文章推荐
- .Net Core实现健康检查的示例代码
- Nginx负载均衡实现4层和7层健康检查
- 配置多个相同网段的ECMP下一跳,配合NQA健康检查实现高可靠性
- nginx实现负载均衡和健康检查
- 实现LVS后端服务健康状态检查
- SpringBoot实现项目健康检查与监控
- 利用ldirectord实现lvs后端realserver健康状态检查
- php实现实现代码多主从,切换,轮询,健康检查
- 使用阿里云Serverless函数计算实现HTTP健康检查+故障短信通知
- 利用heartbeat+drbd实现HA,ldirectord健康检查后端realserver。
- 7.0下通过CARP+PF+relayd+PFSYNC实现健康检查等功能群集[转]
- LVS健康检查及keepalived实现高可用集群
- SpingBoot-Actuator 实现健康检查、监控 的学习总结
- LVS之五:使用脚本实现RealServer的健康检查
- 给 asp.net core 写一个简单的健康检查
- NET Core中使用Irony实现自己的查询语言语法解析器
- .net core 借助容联云实现短信验证码
- 【Consul】Consul实践指导-健康检查(Checks)
- SpringBoot之旅 -- SpringBoot 项目健康检查与监控
- LVS之RealServer健康检查脚本