我在一组Service Fabric服务上添加了Microsoft.AspNetCore.Diagnostics.HealthChecks
,其中一些具有HTTP ServiceEndpoint,而有些则没有。
对于那些没有服务端点的对象,如果我想添加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
类,以便可以将其结果输出到日志?
我认为您可以这样做:
HealthCheckService
)获取IServiceProvider
实例。healthCheckService.CheckHealthAsync
以获取健康状态。await Task.Delay(sleepTimeSpan)
代替Thread.Sleep
此想法基于中间件代码here。