Spring Boot RabbitMQ - 如何确保多个消费者一次消费一个消息

时间:2018-03-06 15:48:38

标签: spring-boot rabbitmq spring-amqp

我正在使用Spring Boot + RabbitMQ服务器,对于我的一个队列,我希望我的多个消费者能够连续消费这些消息,即

Expexted Behaviour consumer1: message1 xxxxxxxx message3 xxxxxxxx consumer2: xxxxxxxx message2 xxxxxxxx message4

现在我正在使用以下内容来实现排他性:

@RabbitListener(queues = Constants.QUEUE_TOPIC, exclusive = true)

但是这一次只允许一个活跃的消费者,所以我的功能不会破坏,但可伸缩性是。

请建议正确的方法。谢谢!

1 个答案:

答案 0 :(得分:0)

按照这些步骤,它可能会帮助你:(伪代码)

Sender.java: -

班级发件人{

  1. static final String QUEUE_NAME =“queue_name”;
  2. void main(String [] argv){

    1. 建立联系。

    2. 声明队列。

      => channel.queueDeclare(QUEUE_NAME,true,false,false,null);

    3. 在同一个队列中发布多条消息:

      => int count; //扫描仪没有消息的用户输入

      =>发布[“message”+ i] with i ++ in channel.basicPublish()in while循环计数次数

    4. 关闭频道连接。

    5. }

      }

      <强> MessageConsumer.java: -

      class MessageConsumer {

      1. static final String QUEUE_NAME =“queue_name”;
      2. void main(String [] argv){

        1. 建立联系。

        2. 声明队列。

          =&gt; channel.queueDeclare(QUEUE_NAME,true,false,false,null);

        3. 使用channel.basicQos(1); //消费者预取。

        4. 使用最终消费者消费者消耗消息= new Defaultconsumer()
          {public void handleDelivery {...}};

        5. channel.basicConsume(QUEUE_NAME,true,consumer);)

        6. }

          }

          运行MessagerConsumer.java的2个或更多实例以检查消息的串行消耗

          然后根据用户输入运行Sender.java。

          看看你是否得到了想要的结果。