4

语境

我正在寻找一种方法来告诉我的用户我的 Asp.Net Core 站点的一个依赖项已关闭,因此该站点当前不可用。最好使用错误页面。

Asp.Net Core 提供了健康检查功能来管理依赖健康检查的逻辑,但它只提供了一个用于负载平衡器的端点。还有一种仪表板功能可用于健康检查,但这并不意味着最终用户的错误页面,它是针对管理员的。

我为什么要研究这个功能?

我正在使用 Azure 前门。该产品用作负载平衡器。它可以查看 Asp.Net Core 健康检查提供的健康状态端点,并将不健康的后端节点排除在轮换之外。

但是,它不提供自定义错误页面,并且在所有后端节点都关闭的情况下,它将假定所有节点都是健康的。我的站点的依赖项之一是外部服务,如果它关闭,我的站点的所有实例都将关闭。它包含例如用户与我的站点交互所需的用户帐户。因此,我相信我需要在 Asp.Net Core 站点中实现一个错误页面,当该外部依赖项关闭时,该页面将显示一个错误页面。

建议的解决方案

我的一个想法是让中间件在站点降级时始终返回503 Service Unavailable或抛出异常。然后,Asp.Net Core 状态页面功能可以将其转换为适当的错误页面。

问题 1

这是最好的架构吗?其他人是如何做到这一点的?

问题2

访问当前健康状况的最实用方法是什么?

从技术上讲,可以HealthCheckService.CheckHealthAsync(...)直接调用该方法,但等待该方法需要一些时间(特别是如果其中一个依赖服务没有响应)。因此,在请求管道中进行阻塞并不是一个好主意。

我可以使用 aHealth Check Publisher通过将其发布到某个自定义HealthStatusCache服务来缓存健康状态,但感觉有点像一种解决方法。其他人会这样做吗?

4

0 回答 0