【rabbitMQ】模拟work queue,实现单个队列绑定多个消费者

上一篇: springboot整合rabbitMQ模拟简单收发消息

https://blog.csdn.net/m0_67930426/article/details/134904766?spm=1001.2014.3001.5502

在这篇文章的基础上进行操作

基本思路:

1.在rabbitMQ控制台创建一个新的队列

2.在publisher服务中定义一个测试方法,在1秒内产生40条消息,发送到新创建的队列

3.在consumer服务中定义两个消息监听者,监听新创建的队列

1.在rabbitMQ控制台创建一个新的队列

2.在publisher服务中定义一个测试方法,在1秒内产生40条消息,发送到新创建的队列

java 复制代码
 @Test
    void Test2Send() {
        String queueName = "work.queue";
        for (int i =1 ; i <= 40; i++) {
            String msg = "hello,message_"+i;
            rabbitTemplate.convertAndSend(queueName, msg);
            try {
                Thread.sleep(30);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
    }

3.在consumer服务中定义两个消息监听者,监听新创建的队列

java 复制代码
@RabbitListener(queues = "work.queue")
public void ccc(String msg){
    System.out.println("消费者c收到了work.queue的消息:【"+msg+"】");
}

@RabbitListener(queues = "work.queue")
public void ddd(String msg){
    System.err.println("消费者d收到了work.queue的消息:【"+msg+"】");
}

调试:

消费者消息推送限制

默认情况下,rabbitMQ会将消息依次投递给绑定在队列上的每一个消费者,但这并没有考虑到

消费者是否处理完消息,就很可能出现消息堆积现象

应对这一现象,我们可以在application.yml上设置preFetch的值为1,每次只能获取1条消息,

处理完才能获取下一条消息

在消费者模块的配置文件里设置

相关推荐
Java 码农23 分钟前
RabbitMQ集群部署方案及配置指南05
分布式·rabbitmq
小马爱打代码1 小时前
ZooKeeper:五种经典应用场景
分布式·zookeeper·云原生
上海锟联科技4 小时前
DAS一体化光模块
分布式·分布式光纤传感·ofdr·光频域反射·das
Java 码农5 小时前
RabbitMQ集群部署方案及配置指南01
linux·服务器·rabbitmq
Overt0p5 小时前
抽奖系统(6)
java·spring boot·redis·设计模式·rabbitmq·状态模式
Java 码农5 小时前
RabbitMQ集群部署方案及配置指南04
分布式·rabbitmq
独自破碎E5 小时前
在RabbitMQ中,怎么确保消息不会丢失?
分布式·rabbitmq
Java 码农5 小时前
RabbitMQ集群部署方案及配置指南02
分布式·rabbitmq
虫小宝5 小时前
京东返利app分布式追踪系统:基于SkyWalking的全链路问题定位
分布式·skywalking
星图易码5 小时前
星图云开发者平台功能详解 | IoT物联网平台:工业设备全链路智能管控中枢
分布式·物联网·低代码·低代码平台