1

是否有针对服务结构的内置运行状况检查?我有一个用 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 健康检查路线?

4

1 回答 1

2

AspNetCore 上引入的Healthcheck是一种返回某些服务状态数据的机制,它不影响服务的实际状态。

在 Service Fabric 中,如果要将服务内部的运行状况报告给 Service Fabric 运行状况系统,可以使用ReportReplicaHealth()API。像这样的东西:

HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
this.Partition.ReportReplicaHealth(healthInformation);

这将在 SF Explorer 中显示为错误。

您还可以使用 FabricClient 报告问题,如此处所述在这种情况下,您将创建一个服务来监控其他服务,然后报告它们的状态,也就是 Watchdog。

AFAIK,Service Fabric 没有 HTTP 探测机制来检查服务的运行状况,它使用服务直接报告给运行状况子系统的内部指标。

如果您打算在向它发送请求之前使用它来验证服务是否健康,您可以使用负载均衡器 http 探测器,或者您可以将其放在处理故障并将请求转发到有效节点的代理后面,例如此处描述的内置反向代理。

于 2018-12-18T18:32:23.043 回答