Rabbit MQ备份使用者

时间:2018-12-31 17:55:01

标签: rabbitmq producer-consumer dead-letter

我尝试在Rabbit MQ中设置以下用例:

  1. 通常,进程A应该处理所有发送到队列A的消息。
  2. 但是,如果进程A发生故障(不再从队列A消耗),那么进程B应该处理消息,直到进程A恢复正常。

起初,似乎消费者优先考虑的问题可能是解决方案。 https://www.rabbitmq.com/consumer-priority.html。但是,当进程A被阻止处理其他消息时,它将向进程B发送消息。我只希望它们在进程A关闭时发送到进程B。

第二个选项可能是无效的字母。 https://www.rabbitmq.com/dlx.html。如果进程A不是从队列A中读取消息,则消息最终将超时,然后移动到将消息转发到进程B读取的队列的交换器中。但是,该选项需要等待消息超时,这并不理想。即使进程A仍在工作,消息也可能超时,这是不理想的。

有什么想法可以为上述用例配置Rabbit MQ?谢谢

1 个答案:

答案 0 :(得分:0)

根据您对我的问题的回答,我可能会在使用方上使用优先级,以便进程A处理最多的消息以及较高的预取计数(如果可能,您必须确保您的进程可以处理如此高的消息)数字)。

然后,进程B将处理由于高负载而无法处理进程A的消息,或者在进程A不可用时处理所有消息。在高负载的情况下,某些消息以更高的延迟处理可能是可以接受的。不要忘记为进程B设置低的预取计数。

希望这会有所帮助。