.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,結果如下:
https://dotnetthoughts.net/implementing-health-check-aspnetcore/
熱門排行
- GC類壓力管道安裝資質辦理,氨製冷(冷庫)管道定期檢驗程序
- 幾種PCBA表面處理的類型
- 歌禮制藥-B(01672)宣佈口服PD-L1小分子抑制劑前藥ASC61 用於治療晚期實體瘤的美國I期臨床試驗完成首例患者給藥
- 深耕CRO服務領域 宣泰醫藥(688247.SH)擬首次公開發行4534萬股
- 壓力容器許可證資質辦理,鉻鉬鋼製壓力容器結構設計規定
- 家裡有點地,這種果樹種上兩棵,栽到花盆裡,夏天就能結果子
- 家裡養株“大將軍”蘭花,花色喜慶,花大如盆,打理很簡單
- 庫存飆升!韓國半導體庫存激增80%
- 多點DMALL合夥人劉桂海:多點DMALL實踐實體零售數字化轉型
- 豬各階段拉稀的原因和解決方案,這篇文章告訴你答案,值得收藏