当然不要忘记,官网才是最好的老师:docs.microsoft.com/zh-cn/dotnet/core/
沙盒学习指南: 免费环境docs.microsoft.com/zh-cn/learn/browse
posted @ 2020 初久的私房菜 推荐出品

.NET Core 中的健康检查

 

正文

介绍

在现代的软件架构中,应用程序的健康状态监测是一个不可或缺的环节。健康检查(Health Checks)为应用程序提供了一种机制,通过 HTTP 端点暴露其运行状态。这些端点不仅可以指示应用程序自身是否健康,还可以检查应用程序依赖的外部服务(如数据库、缓存系统等)的健康状况。本文将详细介绍如何在 ASP.NET Core 中配置和使用健康检查。

健康检查的重要性

健康检查对于应用程序的监控和运维至关重要。它们可以被监控系统用来实时了解应用程序的健康状态,也可以用于流量路由和负载均衡。通过健康检查,运维人员可以及时发现并处理潜在的问题,确保应用程序的稳定运行。

ASP.NET Core 健康检查基础配置

在 ASP.NET Core 中,配置健康检查非常简单。你只需要注册健康检查服务并映射一个端点即可。

以下是一个基础配置的示例:

$$$var builder = WebApplication.CreateBuilder(args);

builder.Services.AddHealthChecks();

var app = builder.Build();

app.MapHealthChecks("/healthz");

app.Run();
$$$

默认情况下,如果没有配置具体的健康检查,该端点将返回一个简单的健康响应,状态码为 200 OK,内容为纯文本。

自定义健康检查

虽然 ASP.NET Core 提供了一些内置的健康检查,但你可能需要根据自己的需求创建自定义的健康检查。为此,你需要实现 IHealthCheck 接口。

以下是一个自定义健康检查的示例:

$$$public class MyHealthCheck : IHealthCheck
{
public Task CheckHealthAsync(
HealthCheckContext context,
CancellationToken cancellationToken = default)
{
bool healthy = true; // 这里可以添加你的检查逻辑

    if (healthy)
        return Task.FromResult(
            HealthCheckResult.Healthy("The API is healthy"));

    return Task.FromResult(
        HealthCheckResult.Unhealthy("The API is unhealthy"));
}

}
$$$

注册自定义健康检查也非常简单:

$$$builder.Services
.AddHealthChecks()
.AddCheck("Custom");
$$$

集成 Entity Framework

如果你的应用程序使用了 Entity Framework,你不需要编写自定义的健康检查来检测数据库连接。你可以通过添加 Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore NuGet 包来实现这一点。

然后,注册数据库上下文的健康检查:

$$$builder.Services
.AddHealthChecks()
.AddCheck("Custom")
.AddDbContextCheck();
$$$

默认情况下,数据库健康检查会调用 EF 的 CanConnectAsync 方法。你可以通过 AddDbContextCheck 方法的重载来更改这一行为。

如果数据库不可用,你将收到一个不健康的检查结果。

健康检查的状态与自定义

除了 “健康” 和 “不健康” 状态外,健康检查还提供了一个 “降级” 状态。你可以通过 AddCheckAddDbContextCheck 方法的参数或自定义健康检查中的 HealthCheckResult 来更改状态。

以下是一个示例:

$$$builder.Services
.AddHealthChecks()
.AddCheck("Custom")
.AddDbContextCheck(
failureStatus: HealthStatus.Degraded);
$$$

高级配置

ASP.NET Core 的内置健康检查非常灵活。你可以自定义输出、失败状态和 HTTP 状态码。例如,你可以为不同的健康检查配置不同的端点,或者根据不同的环境配置不同的健康检查。

以下是一个高级配置的示例:

$$$var builder = WebApplication.CreateBuilder(args);

builder.Services.AddHealthChecks()
.AddCheck("Custom")
.AddDbContextCheck(
failureStatus: HealthStatus.Degraded);

var app = builder.Build();

app.MapHealthChecks("/healthz", new HealthCheckOptions
{
ResponseWriter = async (context, report) =>
{
context.Response.ContentType = "application/json";
var response = new
{
status = report.Status.ToString(),
checks = report.Entries.Select(entry => new
{
name = entry.Key,
status = entry.Value.Status.ToString(),
description = entry.Value.Description
})
};
await context.Response.WriteAsync(JsonConvert.SerializeObject(response));
}
});

app.Run();
$$$

总结

健康检查是应用程序运维的重要组成部分。通过本文的介绍,你应该已经了解了如何在 ASP.NET Core 中配置和使用健康检查。无论你的应用程序是否已经使用了健康检查,现在都是一个开始的好时机。希望这个简单的教程能够帮助你更好地监控和管理你的应用程序。

posted @   初久的私房菜  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
作者:初久的私房菜
好好学习,天天向上
返回顶部小火箭
好友榜:
如果愿意,把你的博客地址放这里
张弛:https://blog.zhangchi.fun/
点击右上角即可分享
微信分享提示