如何在托管服务上实施.NET Core运行状况检查?

时间:2020-02-28 10:17:44

标签: .net-core kubernetes-health-check

问题与标题上的要求相同。对数据库操作,查询,命令和事件存储执行检查很简单,但是我对如何对托管服务执行运行状况检查的最佳方式一无所知。有人可以建议吗?

2 个答案:

答案 0 :(得分:1)

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中,并在IsHostedServiceRunningStartAsync()方法上分别设置StopAsync()。 然后还将您的健康检查控制器注入并读取IsHostedServiceRunning

答案 1 :(得分:0)

另外official Microsoft documentation还是Simon B撰写的完整指南,用于为托管服务编写运行状况检查结构。

您需要3个元素:

  1. 您的托管服务的HealthCheck类
  2. HealthCheck提供者DI以及HealthCheck类的DI。
  3. HealthCheck发布者