【问题标题】:Use health check middleware in .NET Core Generic Host在 .NET Core 通用主机中使用运行状况检查中间件
【发布时间】:2019-11-28 01:04:35
【问题描述】:

将 .NET Core Generic Host 用于处理异步消息的应用程序。

我们使用通用主机而不是 .NET Core WebHost 的原因是因为我的一位同事曾见过几次 MassTransit(我们正在使用的轻量级服务总线框架)作为.NET Core WebHost 在收到 SIGTERM 信号后并不总是在 Linux 上正常关闭 - 我们必须使用 SIGKILL 强行终止进程。

此应用程序将在 Kubernetes 上运行,我们希望使用 K8s 活跃度探针实现自愈架构。在其他使用 WebHost 的 .NET Core 应用程序中,我们使用了 .NET Core 2.2 中引入的Health Checks,但我不知道如何在通用主机中使用这样的中间件。

在 WebHost 中,我可以如下配置中间件:

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

如果使用 .NET Core Generic Host,我将如何处理...

亲切的问候。

【问题讨论】:

  • @LGSon 不确定您是否正确理解了我的问题。我需要使用 .NET 核心 2.2。通用主机(出于概述的原因),但托管 HTTP 可访问端点,例如 /health 的健康检查和 /metrics 的 Prometheus 指标不适合 .NET 2.2 和通用主机 - 请参阅下面的答案。如前所述,很高兴被证明是错误的,如果有更简单的方法......
  • 我明白。首先,仅供参考,“通用主机”将在未来版本(ASP.NET Core 3.0)中取代“Web 主机”,并在 HTTP 和非 HTTP 场景中充当主要主机 API,并且由于 2.2 不在 LTS 上将不得不在 2019 年 12 月之前迁移到 3.0(或失去支持),您可能需要考虑到这一点(3.0 RC 计划于 7 月,GA 于 9 月)。
  • 其次,如果您提供minimal reproducible example 以便我们可以看到您的操作/方式,那么有人可能会给出正确的答案。如果没有,并且您确实发布了自己的答案,其他用户可能会发现这非常有用,尽管它需要一个示例代码。

标签: asp.net-core .net-core asp.net-core-2.2 asp.net-core-middleware .net-core-2.2


【解决方案1】:

通过使用基于 HttpListener 的运行状况检查服务器解决了这个问题 - 很高兴被证明是错误的,但是 AFAIK、Kestrel / ASP.NET Core 中间件不适合 .NET 2.2 和通用主机。

代码见here

【讨论】:

  • "see here for code" 不是我们在 SO 的做法。代码的基本部分应该是答案中,或者当该外部链接失效时它就会消失,并且它对未来用户的有用性(这就是SO的全部意义所在)。
猜你喜欢
  • 2020-04-25
  • 1970-01-01
  • 1970-01-01
  • 2020-08-28
  • 2021-05-30
  • 1970-01-01
  • 2018-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多