服务结构是否有内置的健康检查?我有一个用NET Core 2.2编写的来宾可执行文件,并在其中使用了运行状况检查功能。例如,我有一个简单的运行状况检查,它返回不正常状态:
services
.AddHealthChecks()
.AddCheck<DocumentDbHealthCheck>("cosmos-database");
internal class DocumentDbHealthCheck : IHealthCheck
{
public Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default(CancellationToken))
{
return Task.FromResult(HealthCheckResult.Unhealthy());
}
}
我已经使用:
app.UseHealthChecks(@"/foo/bar/v1/healthcheck");
但是,当我在本地启动我的服务结构实例时,状态是健康的,我期望它处于错误/不健康的状态。
是否可以让服务结构符合API运行状况检查路线?
答案 0 :(得分:1)
AspNetCore上引入的Healthcheck是一种用于返回有关某些服务状态的数据的机制,它不影响服务的实际状态。
在Service Fabric中,如果要将服务中的运行状况报告给Service Fabric运行状况系统,则可以使用ReportReplicaHealth()
API。类似于this:
HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
this.Partition.ReportReplicaHealth(healthInformation);
这将在SF Explorer中显示为错误。
您还可以按照here的说明使用FabricClient报告问题,在这种情况下,您将创建一个服务来监视其他服务,然后报告它们的状态(也称为看门狗)。
AFAIK,Service Fabric没有HTTP探针机制来检查服务的运行状况,它使用服务报告的直接向运行状况子系统报告的内部指标。
如果您打算在发送请求之前使用它来验证服务是否正常,则可以使用load balancer http probes,也可以将其放在处理失败的代理后面,然后将请求转发给有效节点,例如here中所述的内置反向代理。