在 MassTransit for .Net Core 2.2 中实施 IHealthCheck

Implement IHealthCheck in MassTransit for .Net Core 2.2

有没有在 MassTransit 中实现 IHealthCheck 的想法。接口 IHealthCheck 在 .net Core 2.2 Preview 3 中引入 (ASP.NET Core 2.2.0-preview3 now available)

健康检查旨在通过定期控制所有必需的下游组件(如数据库、消息代理、缓存提供程序和我们的服务所依赖的其他服务)来确保服务健康。这就是为什么 Microsoft 默认包含 SQL 服务器或 URL 调用等健康检查。

MassTransit 不是基础设施,它是一个消息传递中间件库。您可能感兴趣的是指标。有一些用于 MassTransit 的指标收集库,例如包含在主存储库中的那个,用于 Application Insight,或者我为 AppMetrics 和 Prometheus 制作的那些。指标会告诉您您的消费者是否过得好。但是,虽然健康检查是二元的(健康与否),但指标是相对的。比如,如果您在几分钟内得到的错误数等于已使用的消息数 window - 您就有问题了。或者,关键时间(即发送或发布消息的时间与完全处理消息的时间之间的差值)不断增加或超过某个阈值。您需要根据您可以容忍的值设置一些更全面的警报来检测这些情况。

因此,如果您想要进行健康检查 - 请考虑检查与您的总线使用的消息代理以及您的消费者使用的所有 infrastructure/services 的连接。对于消息代理,您可以使用本机客户端实现这些检查。

但是,MassTransit 也可以做一些事情。可以将一个 IBusObserver 实例连接到总线控件,也可以为每个接收端点使用一个 IReceiveEndpointObserver 实例。如果总线无法启动或端点出现连接错误 - 您可能无法通过健康检查。在写这篇文章的时候,我有了一些想法,可能会在下周实施其中的一些检查:)