c# - 在不调用 HTTP 端点的情况下从代码调用 AspNetCore.Diagnostics.HealthCheck?

标签 c# asp.net-core .net-core azure-service-fabric health-monitoring

我添加了 Microsoft.AspNetCore.Diagnostics.HealthChecks在 Service Fabric 服务的集合上,其中一些具有 HTTP ServiceEndpoints,而另一些则没有。

对于没有服务端点的那些,如果我想添加一些 IHealthCheck 的实现并将它们添加到 ServiceCollectionStartUp如下:

services
  .AddHealthChecks()
   .AddCheck<DatabaseHealthCheck>("Database")
   .AddCheck<Api1HealthCheck>("Dependency API 1")
   .AddCheck<Api2HealthCheck>("Dependency API 2");

有没有一种方法可以在不调用服务本身的 HTTP 端点的情况下调用这些健康检查?

这些特定服务在 RunAsync 中有一个像这样的 while 循环当前将心跳输出到日志的方法:

public async Task RunAsync(string appInstanceDesc, CancellationToken cancellationToken)
    {
        long iterations = 0;
        var sleepTimeSpan = _config.PollingInterval.GetTimeSpan();

        while (true)
        {
            if (cancellationToken.IsCancellationRequested)
            {
                _logger.LogInformation("Cancellation requested - shutting down");
                break;
            }

            _logger?.LogDebug($"CR Heartbeat log iteration 
                                   {++iterations}{appInstanceDesc}");

            Thread.Sleep(sleepTimeSpan);
        }
    }

有没有办法调用 HealthCheck该循环中的类,以便可以将其结果输出到日志中?

最佳答案

假设您添加了内置的健康检查框架:

services.AddHealthChecks()

如果你这样做:

.. appBuilder.ApplicationServices.GetService<HealthCheckService>();

.. serviceProvider.GetRequiredService<HealthCheckService>();

为了手动执行 CheckHealthAsync得到 HealthReport返回包含状态:

HealthReport healthReport = await healthCheckService.CheckHealthAsync();

确保您使用的是正确的 HealthCheckService因为它存在于两个地方,在:

using Microsoft.Extensions.Diagnostics.HealthChecks;

并在:

using Microsoft.Extensions.HealthChecks;

在我的例子中,我不得不使用 Microsoft.Extensions.Diagnostics.HealthChecks 中的那个

关于c# - 在不调用 HTTP 端点的情况下从代码调用 AspNetCore.Diagnostics.HealthCheck?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59054618/

相关文章:

asp.net-core - 我在哪里可以翻译 ASP.NET Core 中 Identity 中的 "ForgotPassword"页面?

macos - VSCode-如何在.Net Core 2.0+ API中管理用户 secret

c# - 在异步方法中等待完成的任务

c# - 反射和动态 LINQ 的性能 - 'first time' 与 'subsequent runs'

c# - 是否可以将 Resharper Intellisense 配置为按字母顺序排序?

linq - "Where"和 Nullable 类型之后的 "ProjectTo"子句?

c# - Raspberry PI 上 Ubuntu 上的 ASP.NET Core 应用程序

c# - 我的 Pandigital To Roman Number 不工作

debugging - 如何调试 Razor 页面中的嵌入式代码?

c# - 带有外键列表的附加属性