网站首页> 文章专栏> RabbitMQ-客户端-work模型
RabbitMQ-客户端-work模型
原创 时间:2024-05-09 15:02 作者:AI智能 浏览量:1599

Java客户端-work模型

多个消费者绑定一个队列,共同消费队列中的消息

1716274821726.webp



1716274861234.webp


1,在控制台创建work.queue队列

1716274880827.webp



2,创建两个work.queue队列消费者

@Slf4j
@Component
public class SpringRabbitListener {

    @RabbitListener(queues = "simple.queue")
    public void listenSimpleQueueMessage(String msg){
        System.out.println("接收到消息:" + msg);
    }

    @RabbitListener(queues = "work.queue")
    public void listenSimpleQueueMessage1(String msg){
        System.out.println("消费者1 收到了 work.queue:" + msg);
    }

    @RabbitListener(queues = "work.queue")
    public void listenSimpleQueueMessage2(String msg){
        System.out.println("消费者2 收到了 work.queue:" + msg);
    }
}


3,创建生产者

@Test
void testWorkQueue() throws InterruptedException {
    String queuename = "work.queue";
    for (int i = 50; i > 0; i--) {
        System.out.println(i);
        String message = "hell,work,messgae_" + i;
        rabbitTemplate.convertAndSend(queuename,message);
        Thread.sleep(20);
    }
}


消费者消息推送机制

默认情况下,RabbitMQ的会将消息依次轮询投递给绑定在队列上的每一个消费者。但这并没有考虑到消费者是否已经处理完消息,可能出现消息堆积。

因此我们需要修改application.yml,设置preFetch值为1,确保同一时刻最多投递给消费者1条消息:

1716274935993.webp


在消费者端配置:

spring:
  rabbitmq:
    host: 175.11.1.11  #主机名
    username: hamll #创建的用户
    password: hamll #用户的密码
    port: 5672
    virtual-host: /hamll
    listener:
      simple:
        prefetch: 1  #每次只能获取一条消息,处理完成才能获取下一条消息
1716274968461.webp



动动小手 !!!
来说两句吧
最新评论
  • 零距离技师
    让我不再觉得学习新知识困难。博主的付出和分享令人钦佩。谢谢你,继续前行!

  • 帅到冷场
    这个真好,比一些it行业的资料通俗易懂。不像别的除了背书就是背书

  • 破晓诗人
    感谢博主分享的优质好文,内容干货很多,学到了

  • 优雅转身
    文章已读,博主的文章内容丰富,透彻,支持

  • 精英男士低调
    十分细致,结构严谨。感谢博主分享,期待博主持续输出好文。

  • 冷月
    整理不易。学习了。