我有一个direct交换。还有一个队列与该交换器绑定。
该队列有两个消费者。消费者完成相应的处理后,将手动确认消息。
消息按逻辑顺序/排序,并且应按该顺序进行处理。是否可以强制要求消费者 A 和消费者 B 按顺序接收和处理所有消息?换句话说,阻止A和B同时处理消息。
注:消费者是not共享相同的连接和/或通道。这意味着我无法使用<channel>.basicQoS(1);
.
这个问题的基本原理:两个消费者是相同的。如果其中一个队列发生故障,另一个队列将开始处理消息,并且一切都会继续工作,无需任何必要的干预。
在需要冗余使用者但需要按特定顺序处理消息的情况下,处理故障转移的一种方法是在设置与队列的绑定时使用独占使用者选项,并让两个使用者不断尝试绑定,即使在他们无法获得独占锁。
过程是这样的:
- 消费者 A 首先启动并作为独占消费者绑定到队列。消费者 A 开始处理队列中的消息。
- 消费者B接下来启动并尝试作为独占消费者绑定到队列,但被拒绝,因为队列已经有独占消费者。
- 消费者 B 定期尝试获取队列上的独占绑定,但遭到拒绝。
- 托管消费者 A 的进程崩溃。
- 消费者 B 尝试作为独占消费者绑定到队列,这次成功了。消费者 B 开始处理队列中的消息。
- 消费者 A 重新上线,并尝试独占绑定,但现在被拒绝。
- 消费者 B 继续按 FIFO 顺序处理消息。
虽然这种方法不提供负载共享,但它确实提供了冗余。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)