我添加了 Microsoft.AspNetCore.Diagnostics.HealthChecks
在 Service Fabric 服务的集合上,其中一些具有 HTTP ServiceEndpoints,而另一些则没有。
对于没有服务端点的那些,如果我想添加一些 IHealthCheck
的实现并将它们添加到 ServiceCollection
在 StartUp
如下:
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/