如何在托管服务上实施 .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 个元素:

  1. 托管服务的健康检查class
  2. HealthCheck Provider DI,以及 HealthCheck class' DI。
  3. HealthCheck 发布者