我们已经为一组 NServiceBus 服务集群了 MSMQ,并且一切都运行良好,直到它没有。一台服务器上的传出队列开始填满,很快整个系统就会挂起。
更多细节:
我们在服务器 N1 和 N2 之间有一个集群 MSMQ。其他集群资源只是作为本地直接在集群队列上运行的服务,即 NServiceBus 分发器。
所有工作进程都位于不同的服务器上,Services3 和 Services4。
对于那些不熟悉 NServiceBus 的人,工作进入由分发服务器管理的集群工作队列。Service3 和 Services4 上的工作应用程序将“我准备好工作”消息发送到由同一分发器管理的集群控制队列,分发器通过向工作进程的输入队列发送一个工作单元来响应。
在某些时候,此过程可能会完全挂起。这是系统挂起时集群 MSMQ 实例上的传出队列的图片:
如果我将集群故障转移到另一个节点,就好像整个系统都受到了影响。这是故障转移后不久的同一群集 MSMQ 实例的图片:
谁能解释这种行为,以及我能做些什么来避免它,以保持系统平稳运行?