【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条消息,

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

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

相关推荐
殷紫川1 分钟前
别再乱用了!幂等处理与分布式锁,90% 开发者都踩过的坑与正确落地姿势
分布式·架构
Jack_David4 小时前
Kafka批量消息发送
java·分布式·kafka
wanhengidc5 小时前
服务器托管对企业的作用
大数据·运维·服务器·分布式·智能手机
Code知行合壹5 小时前
Spark使用总结
大数据·分布式·spark
Swift社区5 小时前
分布式能力不是功能,而是一种架构约束
分布式·架构
0xDevNull5 小时前
Apache Kafka 完全指南
分布式·kafka
zb200641206 小时前
RabbitMQ 客户端 连接、发送、接收处理消息
分布式·rabbitmq·ruby
夜空下的星7 小时前
Springboot结合RabbitMQ实现延时队列
spring boot·rabbitmq·java-rabbitmq
yiyaozjk7 小时前
RabbitMQ HAProxy 负载均衡
rabbitmq·负载均衡·ruby
半桶水专家7 小时前
Kafka JMX详解
分布式·kafka