使用 MassTransit 使消费者离线(计划内停机)

Take a Consumer Offline (Planned Outage) with MassTransit

我有许多服务器,每个 运行 一个服务的单个实例/侦听相同的 queue/endpoint,这(故意!)导致 Competing Consumer 模式。

这个解决方案很棒,因为它提供了负载平衡和高可用性,非常适合我的用例。

然而,我希望能够实现的是一种能够使单个节点脱机的方法而不会产生任何影响。换句话说,一种能够告诉节点完成对它已经收到的任何消息的处理,但不使用任何 new 消息的方法(而不是仅仅切换服务关闭并且必须管理任何正在处理的消息的终止。

对于如何解决这个问题,有什么建议吗?能够做到这一点的一个好处是允许非中断滚动 upgrades/deployments.

谢谢!

调用 busControl.Stop(); 应该完全关闭总线,包括正常关闭每个接收端点。这将允许当前消费者完成,但会阻止新消费者接收消息。

一旦Stop方法returns,进程可能会退出,其余节点将保持在线。