JobHealthz 0.1.1
dotnet add package JobHealthz --version 0.1.1
NuGet\Install-Package JobHealthz -Version 0.1.1
<PackageReference Include="JobHealthz" Version="0.1.1" />
paket add JobHealthz --version 0.1.1
#r "nuget: JobHealthz, 0.1.1"
// Install JobHealthz as a Cake Addin #addin nuget:?package=JobHealthz&version=0.1.1 // Install JobHealthz as a Cake Tool #tool nuget:?package=JobHealthz&version=0.1.1
netcore-job-healthz
为您的作业添加健康检查端点的简单库
为什么...?
后台作业可以持续运行或在计划中运行。无论如何,它们有时会陷入一种什么也不做的状态。例如,一个在计划中运行以查询数据库并执行该工作的作业可能会在循环中的某个地方卡住。当发生这种情况时,您希望该作业被终止并重新启动,而不是几个小时什么都不做地继续运行。
协调器(如 Kubernetes)允许您使用探测对您的应用程序进行周期性健康检查。如果健康检查失败,应用程序可以轻松地被终结并重新安排。《/heathz》端点是此类健康检查的常见做法。
入门
1 - 使用 NuGet 安装 JobHealthz - https://nuget.net.cn/packages/JobHealthz/
2 - 在您的应用程序启动时,初始化 Healthz 并通过评估运行进程的健康状态的回调调用 Start - 例如
new Healthz()
.Start(() => return new HealthzResult {
Status = HealthzStatus.Ok,
Message = "Nothing to see here..."
});
它是如何工作的?
该库使用 Microsoft.AspNetCore.Server.Kestrel 公开单个 HTTP 端点。当您启动它时,它将使用默认的 ASP.NET Core URLs 配置网络服务器并将 /healthz 端点映射到健康检查。您将在控制台看到以下内容
Health checks listening on https://127.0.0.1:5000,https://127.0.0.1:5001 at /healthz.
您可以通过设置 ASPNETCORE_URLS 环境变量来更改基本 URL - 例如 ASPNETCORE_URLS=https://127.0.0.1 dotnet run
。
当调用/healthz端点时,提供的回调将被执行,并将结果转换为HTTP响应 - 例如:
$ curl localhost:5000/healthz -v
* Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 5000 (#0)
> GET /healthz HTTP/1.1
> Host: localhost:5000
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Thu, 16 Aug 2018 11:08:50 GMT
< Server: Kestrel
< Transfer-Encoding: chunked
<
* Connection #0 to host localhost left intact
Nothing to see here...
记录健康检查
要更好地了解健康检查,您可以使用微软的DI和日志库来启用日志记录初始化Healthz。
var serviceProvider = new ServiceCollection()
.AddLogging(l => l.AddConsole())
.AddSingleton<Healthz>()
.BuildServiceProvider();
serviceProvider.GetService<Healthz>()
.Start(() => return new HealthzResult {
Status = HealthzStatus.Ok,
Message = "Nothing to see here..."
});;
使用IHealthCheck
指定健康检查的另一种方法是实现IHealthCheck接口并使用它调用Healthz.Start。库中也实现了这个接口,叫做LastCheckpointHealthCheck,它跟踪上次调用Checkpoint()的时间,并在一个阈值范围内返回Ok响应。例如:
var check = new LastCheckpointHealthCheck(TimeSpan.FromMinutes(1));
new Healthz.Start(check);
while (true) {
// do work...
check.Checkpoint();
}
如果在上述代码中从Checkpoint()调用时间间隔超过1分钟,端点将返回一个Fail响应。
产品 | 版本 兼容的和非计算的额外目标框架版本。 |
---|---|
.NET | net5.0已计算。 net5.0-windows已计算。 net6.0已计算。 net6.0-android已计算。 net6.0-ios已计算。 net6.0-maccatalyst已计算。 net6.0-macos已计算。 net6.0-tvos已计算。 net6.0-windows已计算。 net7.0已计算。 net7.0-android已计算。 net7.0-ios已计算。 net7.0-maccatalyst已计算。 net7.0-macos已计算。 net7.0-tvos已计算。 net7.0-windows已计算。 net8.0已计算。 net8.0-android已计算。 net8.0-browser已计算。 net8.0-ios已计算。 net8.0-maccatalyst已计算。 net8.0-macos已计算。 net8.0-tvos已计算。 net8.0-windows已计算。 |
.NET Core | netcoreapp2.0已计算。 netcoreapp2.1已计算。 netcoreapp2.2已计算。 netcoreapp3.0已计算。 netcoreapp3.1已计算。 |
.NET Standard | netstandard2.0 兼容。 netstandard2.1 已计算。 |
.NET Framework | net461 已计算。 net462 已计算。 net463 已计算。 net47 已计算。 net471 已计算。 net472 已计算。 net48 已计算。 net481 已计算。 |
MonoAndroid | monoandroid 已计算。 |
MonoMac | monomac 已计算。 |
MonoTouch | monotouch 已计算。 |
Tizen | tizen40 已计算。 tizen60 已计算。 |
Xamarin.iOS | xamarinios 已计算。 |
Xamarin.Mac | xamarinmac 已计算。 |
Xamarin.TVOS | xamarintvos 已计算。 |
Xamarin.WatchOS | xamarinwatchos 已计算。 |
-
.NETStandard 2.0
- Microsoft.AspNetCore.Server.Kestrel (>= 2.1.2)
NuGet 包
此包没有被任何 NuGet 包使用。
GitHub 仓库
此包没有被任何流行的 GitHub 仓库使用。