RabbitMQ的自定义插件开发

时间:2016-05-03 19:55:32

标签: rabbitmq

我需要对多个使用者实施顺序消息处理,但每次只有一条消息在队列中。我有很多队列,但所有队列都是顺序的,我需要多个消费者支持负载平衡和冗余。任何人都可以判断是否真实地将未确认消息的数量限制为每个队列1个?

2 个答案:

答案 0 :(得分:1)

  

任何人都可以判断是否真实将未确认消息的数量限制为每个队列1个?

这对多个消费者来说是不可能的。您可以使用单个通道的预取限制来限制未确认消息的数量,但不能跨多个通道/使用者限制。它与消费者的渠道相关联,而不是与队列相关联。

使用预取的唯一方法是使用单个使用者和单个队列。

即使这样,您也无法保证消息将以正确的顺序到达队列。

(这是任何类型的分布式系统的基本困难,而不是rabbitmq限制)

查看Message SequencerResequencer模式,尝试按顺序放回邮件。

但即便如此,你也会遇到困难。

您还想了解幂等性,这样您就不会重新处理已经处理过的消息。

答案 1 :(得分:0)

您应该能够将您的消费者配置为仅使用X消息,并为您的频道使用相同的消息。请查看 QOS 消费者预取

https://www.rabbitmq.com/consumer-prefetch.html

这是一个例子,多消费者只能识别一条消息,而且只允许一条消息进行通信(无论消费者插入多少消息)

Channel channel = ...;
Consumer consumer1 = ...;
Consumer consumer2 = ...;
channel.basicQos(1, false); // Per consumer limit
channel.basicQos(1, true);  // Per channel limit
channel.basicConsume("my-queue1", false, consumer1);
channel.basicConsume("my-queue2", false, consumer2);

在这里,消费者每次只能识别一条消息,并且该频道只能有一条未经批准的消息。你没有提到你使用的语言,所以你可能必须适应这个例子。