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

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

目录

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


生产者源码
消费者源码

一、案例需求

模拟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/339172.html

相关文章:

  • Node.js 在 Windows Server 上的离线部署方案
  • leetcode349. 两个数组的交集
  • 轻度娱乐浪潮下定制开发开源AI智能名片S2B2C商城小程序的机遇与策略
  • 厚板数控矫平机的“第三堂课”——把视角拉远,看看它如何重塑整条制造链
  • 供水设备智慧化管理物联网解决方案:远程监控与运维
  • 搭建最新--若依分布式spring cloudv3.6.6 前后端分离项目--步骤与记录常见的坑
  • BKP相关知识点
  • 从机器视觉到图像识别:计算机视觉的多维探索
  • LINUX819 shell:for for,shift ,{} ,array[0] array[s] ,declare -x -a
  • 服务注册与服务发现原理与实现
  • CentOS 8开发测试环境:直接安装还是Docker更优?
  • Docker核心---数据卷(堵门秘籍)
  • 应用控制技术、内容审计技术、AAA服务器技术
  • 深入理解Redis持久化:让你的数据永不丢失
  • 电子电气架构 ---SDV技术基础与传统E/E架构有何不同?
  • 利用图数据库高效解决 Text2sql 任务中表结构复杂时占用过多大模型上下文的问题
  • 智慧养老中IPTV融合对讲:重塑养老沟通新生态
  • t12 low power design: power plan脚本分享(4) power stripe
  • spring声明式事务,finally 中return对事务回滚的影响
  • 数据资产入表——图解《企业数据资源相关会计处理暂行规定》《数据资产评估指导意见》【附全文阅读】
  • 企业架构是什么?解读
  • 功能组状态的独立性以及 进程启动在状态管理中的设计意图
  • 用“新”突围,康师傅布局增量市场
  • latex|算法algorithm宏包和注意事项
  • 检测设备为手机或电脑来跳转不同网页
  • GaussDB 八种常规锁介绍
  • Redis的使用(初阶)
  • 命令行如何更改参数?
  • 化学反应中的贝叶斯优化
  • Spring RestTemplate的postForObject()方法详解与实践指南