在.NET Core通用主机中使用健康检查中间件

5

使用.NET Core 通用主机处理异步消息的应用程序。

我们使用通用主机而不是.NET Core WebHost的原因是,我的一位同事看到过一些情况,其中作为.NET Core WebHost的一部分运行的轻量级服务总线框架MassTransit在接收到SIGTERM信号后并不总是在Linux上正常关闭 - 我们不得不使用SIGKILL强制终止进程。

这个应用程序将在Kubernetes上运行,我们希望使用K8s存活探针实现自我修复架构。在其他使用WebHost的.NET Core应用程序中,我们使用了.NET Core 2.2中引入的健康检查,但我不知道如何在通用主机中使用这样的中间件。

在WebHost中,我可以按以下方式配置中间件:

app.UseHealthChecks(appSettings.HealthChecksPath ?? "/health");

如果使用.NET Core通用主机,我该如何处理这个问题...
祝好。

文档是一个不错的起点:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/host/generic-host?view=aspnetcore-2.2 - Asons
1
@LGSon 不确定你是否正确理解了我的问题。我需要使用.NET Core 2.2通用主机(出于特定原因),但是在.NET 2.2和通用主机上托管可通过HTTP访问的端点,例如/health的健康检查和/metrics的Prometheus指标并不适合 - 请参见下面的答案。如上所述,如果有更简单的方法,我很乐意接受证明... - Ryan.Bartsch
我明白。首先,FYI,“通用主机”将在未来的发布版本(ASP.NET Core 3.0)中取代“Web Host”,并在HTTP和非HTTP场景下充当主要主机API。由于2.2不是LTS版本,您必须在2019年12月之前转移到3.0(否则将失去支持),您可能需要考虑这一点(同时3.0 RC计划于7月发布,GA计划于9月发布)。 - Asons
其次,如果您提供一个 [mcve],以便我们可以看到您的操作方式,那么其他人可能会有一个正确的答案。即使没有,鉴于您已经发布了自我回答,其他用户可能会发现这非常有用,尽管需要一个示例代码。 - Asons
1个回答

3

我通过使用基于HttpListener的健康检查服务器来解决了这个问题 - 很高兴被证明是错误的,但据我所知,Kestrel / ASP.NET Core中间件不适用于.NET 2.2和通用主机。

请点击此处查看代码。


8
"see here for code" 不是我们在SO上的做法。代码的重要部分应该答案中,否则当那个外部链接失效时,代码也会失效,对于未来的用户(这就是SO的全部)而言失去了实用性。 - Asons

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接