当前位置: 首页 > news >正文

RabbitMQ:SpringAMQP 多消费者绑定同一队列

目录

  • 一、案例需求
  • 二、代码实现
  • 三、总结


生产者源码
消费者源码

一、案例需求

模拟WorkQueue,实现一个队列绑定多个消费者。

  1. 在RabbitMQ的控制台创建一个队列,命名为work.queue
  2. 在生产者服务中定义测试方法,在1s内产生50条消息,发送到work.queue
  3. 在消费这服务中定义两个消息监听,都监听work.queue队列。
  4. 消费者1每秒处理50条消息,消费者2每秒处理5条消息。

二、代码实现

生产者

@Test
public void workQueueTest() throws InterruptedException {for (int i = 0; i < 50; i++) {String queueName = "work.queue";String message = String.format("hello %s, spring amqp!", i + 1);rabbitTemplate.convertAndSend(queueName, message);Thread.sleep(200);}}

消费者

@RabbitListener(queues = "work.queue")
public void listenWorkQueue1(String message){System.out.println(String.format("消费者1,收到了work.queue: %s", message));
}@RabbitListener(queues = "work.queue")
public void listenSimpleQueue2(String message){System.err.println(String.format("消费者2,收到了work.queue: %s", message));
}

在这里插入图片描述

三、总结

默认情况下,RabbitMQ会将消息依次轮询投递给绑定在队列上的所有消费者。但是这并没有考虑到消费者是否已经处理完消息,可能会出现消息堆积。
因此我们需要修改application.yml,设置prefetch值为1,确保同一时刻最多投递给消费者1条消息。

spring:rabbitmq:listener:simple:prefetch: 1
  • 多个消费者绑定到一个队列,可以加快消费处理速度。
  • 同一个消息只会被一个消费者处理。
  • 通过设置prefetch来控制消费者预取的消息数量,处理完一条再处理下一条,实现能者多劳。
http://www.dtcms.com/a/339603.html

相关文章:

  • shenyu网关与与nacos业务网关的定位
  • 源网荷储 + 微电网:1+1 如何大于 2?能源协同解决方案
  • c++日志宏 INFO(...)
  • Webpack 5 配置完全指南:从入门到精通
  • Docker镜像--镜像分层、UnionFS、镜像发布、私有库Registry
  • Java -- 用户线程和守护线程--线程同步机制
  • 大模型问题:幻觉分类+原因+各个训练阶段产生幻觉+幻觉的检测和评估基准
  • OpenSCA开源社区每日安全漏洞及投毒情报资讯|18th Aug. , 2025
  • 【GNSS定位原理及算法杂记6】​​​​​​PPP(精密单点定位)原理,RTK/PPK/PPP区别讨论
  • usb通信中工作模式:主机模式和设备模式
  • 2025年渗透测试面试题总结-21(题目+回答)
  • 水闸安全监测的主要核心内容
  • Java NIO 核心精讲(上):Channel、Buffer、Selector 详解与 ByteBuffer 完全指南
  • 数字政务安全实战:等保2.0下OA系统的身份认证与数据防护
  • 微软AD国产化替换倒计时——不是选择题,而是生存题
  • 三次握手四次挥手
  • 决策树算法详解
  • Orange的运维学习日记--47.Ansible进阶之异步处理
  • ESP32应用——HTTP client(ESP-IDF框架)
  • STM32之MCU和GPIO
  • AT_abc397_f [ABC397F] Variety Split Hard
  • 高速传输的关键:8B/10B编码学习记录
  • 应用控制技术与内容审计技术
  • 系统架构设计师-操作系统-避免死锁最小资源数原理模拟题
  • 寻找旋转排序数组中的最小值
  • 黄金本周想法
  • 给类或实例打上标识即类的元数据标签方便程序在运行时对其进行分类、识别、筛选
  • 32K上下文开源语音理解、40分钟深度交互——Voxtral-Small-24B-2507本地部署教程
  • GCC编译输出中text,data,bss和dec的含义
  • 构建自主企业:AgenticOps 的技术蓝图