如何在托管服务上实施 .NET Core 健康检查?
How do I implement .NET Core Health Checks on a Hosted Service?
问题如题。对数据库操作、查询、命令和事件存储执行检查很简单,但我不知道 how/what 是对托管服务执行健康检查的最佳方式。谁能给个建议?
IHostedService
接口(和 BackgroundService
基本实现)具有可覆盖的方法 StartAsync()
和 StopAsync()
。
在我们的后台服务中,我们有:
public override Task StopAsync(CancellationToken cancellationToken)
{
_logger.LogWarning("Background service stopping");
return Task.CompletedTask;
}
您可以使用它来 运行 当您的 HostedService
开始或停止时您想要以某种方式通知任何内容。
如果您需要一种轮询服务的方法,您或许可以注入一个具有简单状态的单例,由这些方法设置。然后,您 API / 网站上的健康检查控制器也可以注入并读取单例的状态。像这样:
public interface IHostedServiceStatus
{
bool IsHostedServiceRunning { get; set; }
}
public class HostedServiceStatus : IHostedServiceStatus
{
public bool IsHostedServiceRunning { get; set; }
}
将其设置为单例,注入您的 HostedService
并适当地在 StartAsync()
和 StopAsync()
方法上设置 IsHostedServiceRunning
。
然后也注入你的健康检查控制器并读取 IsHostedServiceRunning
.
另外,来自 Simon B 的 official Microsoft documentation 起草了一份完整指南,为您的托管服务编写健康检查结构。
您需要 3 个元素:
- 托管服务的健康检查class
- HealthCheck Provider DI,以及 HealthCheck class' DI。
- HealthCheck 发布者
问题如题。对数据库操作、查询、命令和事件存储执行检查很简单,但我不知道 how/what 是对托管服务执行健康检查的最佳方式。谁能给个建议?
IHostedService
接口(和 BackgroundService
基本实现)具有可覆盖的方法 StartAsync()
和 StopAsync()
。
在我们的后台服务中,我们有:
public override Task StopAsync(CancellationToken cancellationToken)
{
_logger.LogWarning("Background service stopping");
return Task.CompletedTask;
}
您可以使用它来 运行 当您的 HostedService
开始或停止时您想要以某种方式通知任何内容。
如果您需要一种轮询服务的方法,您或许可以注入一个具有简单状态的单例,由这些方法设置。然后,您 API / 网站上的健康检查控制器也可以注入并读取单例的状态。像这样:
public interface IHostedServiceStatus
{
bool IsHostedServiceRunning { get; set; }
}
public class HostedServiceStatus : IHostedServiceStatus
{
public bool IsHostedServiceRunning { get; set; }
}
将其设置为单例,注入您的 HostedService
并适当地在 StartAsync()
和 StopAsync()
方法上设置 IsHostedServiceRunning
。
然后也注入你的健康检查控制器并读取 IsHostedServiceRunning
.
另外,来自 Simon B 的 official Microsoft documentation 起草了一份完整指南,为您的托管服务编写健康检查结构。
您需要 3 个元素:
- 托管服务的健康检查class
- HealthCheck Provider DI,以及 HealthCheck class' DI。
- HealthCheck 发布者