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

常用:SpringBoot项目引入RabbitMQ步骤

1.引入依赖:

pom.xml添加依赖

<!--核心starter,内置amqp‑client--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>

2.配置文件application.yml

spring: rabbitmq: addresses: amqp://登录RabbitMQ的用户名:登录的密码@部署RabbitMQ服务的公网IP地址:端口/虚拟机名 listener: simple: acknowledge-mode: auto #消息接收确认(自动),默认是auto,这里是为了直观观察 #以上为必写,以下为可选 # #acknowledge-mode: manual #消息接收确认(手动) # #prefetch: 1 #消费者持有最大待消费消息数 # #retry: # #enabled: true # 开启消费者失败重试 # #initial-interval: 5000ms # 初始失败等待时长为5秒 # #max-attempts: 5 # 最大重试次数 # #publisher-confirm-type: correlated #消息发送确认 # #publisher-returns: true #设置回退

3.创建一个常量类(存相关名称)和一个配置类(交换机,队列,绑定关系都写里面)

Constants类:

package com.txm.rabbitmq.constant; public class Constants { //工作模式 public static final String WORK_QUEUE="work.queue"; //发布订阅模式fanout public static final String FANOUT_QUEUE1="fanout.queue1"; public static final String FANOUT_QUEUE2="fanout.queue2"; public static final String FANOUT_EXCHANGE="fanout.exchange"; //路由模式 public static final String DIRECT_QUEUE1="direct.queue1"; public static final String DIRECT_QUEUE2="direct.queue2"; public static final String DIRECT_EXCHANGE="direct.exchange"; //通配符模式 public static final String TOPIC_QUEUE1="topic.queue1"; public static final String TOPIC_QUEUE2="topic.queue2"; public static final String TOPIC_EXCHANGE="topic.exchange"; }

Config类:

package com.txm.rabbitmq.config; import com.txm.rabbitmq.constant.Constants; import org.springframework.amqp.core.*; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class RabbitMQConfig { //工作模式 //声明队列 @Bean("workQueue") public Queue workQueue(){ return QueueBuilder.durable(Constants.WORK_QUEUE).build(); } //发布订阅模式 //1.声明队列 @Bean("fanoutQueue1") public Queue fanoutQueue1(){ return QueueBuilder.durable(Constants.FANOUT_QUEUE1).build(); } @Bean("fanoutQueue2") public Queue fanoutQueue2(){ return QueueBuilder.durable(Constants.FANOUT_QUEUE2).build(); } //2.声明交换机 @Bean("fanoutExchange") public FanoutExchange fanoutExchange(){ return ExchangeBuilder.fanoutExchange(Constants.FANOUT_EXCHANGE).durable(true).build(); } //3.声明交换机和队列的绑定关系 @Bean("fanoutQueueBinding1") public Binding fanoutQueueBinding1(@Qualifier("fanoutExchange") FanoutExchange fanoutExchange,@Qualifier("fanoutQueue1") Queue queue){ return BindingBuilder.bind(queue).to(fanoutExchange); } @Bean("fanoutQueueBinding2") public Binding fanoutQueueBinding2(@Qualifier("fanoutExchange") FanoutExchange fanoutExchange,@Qualifier("fanoutQueue2") Queue queue){ return BindingBuilder.bind(queue).to(fanoutExchange); } //路由模式 //1.声明队列 @Bean("directQueue1") public Queue DIRECT_QUEUE1(){ return QueueBuilder.durable(Constants.DIRECT_QUEUE1).build(); } @Bean("directQueue2") public Queue DIRECT_QUEUE2(){ return QueueBuilder.durable(Constants.DIRECT_QUEUE2).build(); } //2.声明交换机 @Bean("directExchange") public DirectExchange DIRECT_EXCHANGE(){ return ExchangeBuilder.directExchange(Constants.DIRECT_EXCHANGE).durable(true).build(); } //3.声明交换机和队列的绑定关系 @Bean("directQueueBinding1") public Binding directQueueBinding1(@Qualifier("directExchange") DirectExchange directExchange,@Qualifier("directQueue1") Queue queue){ return BindingBuilder.bind(queue).to(directExchange).with("orange"); } @Bean("directQueueBinding2") public Binding directQueueBinding2(@Qualifier("directExchange") DirectExchange directExchange,@Qualifier("directQueue2") Queue queue){ return BindingBuilder.bind(queue).to(directExchange).with("black"); } @Bean("directQueueBinding3") public Binding directQueueBinding3(@Qualifier("directExchange") DirectExchange directExchange,@Qualifier("directQueue2") Queue queue){ return BindingBuilder.bind(queue).to(directExchange).with("orange"); } //通配符模式 //1.声明队列 @Bean("topicQueue1") public Queue topicQueue1(){ return QueueBuilder.durable(Constants.TOPIC_QUEUE1).build(); } @Bean("topicQueue2") public Queue topicQueue2(){ return QueueBuilder.durable(Constants.TOPIC_QUEUE2).build(); } //2.声明交换机 @Bean("topicExchange") public TopicExchange TOPIC_EXCHANGE(){ return ExchangeBuilder.topicExchange(Constants.TOPIC_EXCHANGE).durable(true).build(); } //3.声明交换机和队列的绑定关系 @Bean("topicQueueBinding1") public Binding topicQueueBinding1(@Qualifier("topicExchange") TopicExchange topicExchange,@Qualifier("topicQueue1") Queue queue){ return BindingBuilder.bind(queue).to(topicExchange).with("*.orange.*"); } @Bean("topicQueueBinding2") public Binding topicQueueBinding2(@Qualifier("topicExchange") TopicExchange topicExchange,@Qualifier("topicQueue2") Queue queue){ return BindingBuilder.bind(queue).to(topicExchange).with("*.*.rabbit"); } @Bean("topicQueueBinding3") public Binding topicQueueBinding3(@Qualifier("topicExchange") TopicExchange topicExchange,@Qualifier("topicQueue2") Queue queue){ return BindingBuilder.bind(queue).to(topicExchange).with("lazy.#"); } }

4.写生产者(Controller类,发送消息):

直接注入RabbitTemplate发送消息:

package com.txm.rabbitmq.controller; import com.txm.rabbitmq.constant.Constants; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RequestMapping("/producer") @RestController public class ProducerController { @Autowired private RabbitTemplate rabbitTemplate; //工作队列模式 @RequestMapping("/work") public String work(){ for (int i = 0; i < 10; i++) { //使用内置交换机,RoutingKey和队列名称一致 rabbitTemplate.convertAndSend("", Constants.WORK_QUEUE,"hello spring amqp:Lwork ..."+i); } return "发送成功"; } //发布订阅模式(fanout交换机) @RequestMapping("/fanout") public String fanout(){ rabbitTemplate.convertAndSend(Constants.FANOUT_EXCHANGE,"","hello spring amqp:fanout..."); return "发送成功"; } //路由模式 @RequestMapping("/direct/{routingKey}") public String direct(@PathVariable("routingKey") String routingKey){ rabbitTemplate.convertAndSend(Constants.DIRECT_EXCHANGE,routingKey,"hello spring amqp:direct,my routingKey is "+routingKey); return "发送成功"; } //通配符模式 @RequestMapping("/topic/{routingKey}") public String topic(@PathVariable("routingKey") String routingKey){ rabbitTemplate.convertAndSend(Constants.TOPIC_EXCHANGE,routingKey,"hello spring amqp:topic,my routingKey is "+routingKey); return "发送成功"; } }

5.写消费者(listener类,监听消息)

<1>工作队列模式-消费者:

package com.txm.rabbitmq.listener; import com.txm.rabbitmq.constant.Constants; import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; /** * 工作队列模式-消费者 */ @Component public class WorkListener { @RabbitListener(queues=Constants.WORK_QUEUE) public void queueListener1(Message message){ System.out.println("listener 1 ["+ Constants.WORK_QUEUE+"] 接收到消息:"+message); } @RabbitListener(queues=Constants.WORK_QUEUE) public void queueListener2(Message message){ System.out.println("listener 2 ["+ Constants.WORK_QUEUE+"] 接收到消息:"+message); } }

<2>发布订阅模式(广播模式)-消费者:

package com.txm.rabbitmq.listener; import com.txm.rabbitmq.constant.Constants; import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; /** * 发布订阅模式-消费者 */ @Component public class FanoutListener { @RabbitListener(queues=Constants.FANOUT_QUEUE1) public void queueListener1(String message){ System.out.println("队列["+ Constants.FANOUT_QUEUE1+"] 接收到消息:"+message); } @RabbitListener(queues=Constants.FANOUT_QUEUE2) public void queueListener2(Message message){ System.out.println(" 队列["+ Constants.FANOUT_QUEUE2+"] 接收到消息:"+message); } }

<3>路由模式-消费者:

package com.txm.rabbitmq.listener; import com.txm.rabbitmq.constant.Constants; import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; /** * 路由模式-消费者 */ @Component public class DirectListener { @RabbitListener(queues=Constants.DIRECT_QUEUE1) public void queueListener1(String message){ System.out.println("队列["+ Constants.DIRECT_QUEUE1+"] 接收到消息:"+message); } @RabbitListener(queues=Constants.DIRECT_QUEUE2) public void queueListener2(String message){ System.out.println(" 队列["+ Constants.DIRECT_QUEUE2+"] 接收到消息:"+message); } }

<4>通配符模式-消费者:

package com.txm.rabbitmq.listener; import com.txm.rabbitmq.constant.Constants; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; /** * 通配符模式-消费者 */ @Component public class TopicListener { @RabbitListener(queues=Constants.TOPIC_QUEUE1) public void queueListener1(String message){ System.out.println("队列["+ Constants.TOPIC_QUEUE1+"] 接收到消息:"+message); } @RabbitListener(queues=Constants.TOPIC_QUEUE2) public void queueListener2(String message){ System.out.println(" 队列["+ Constants.TOPIC_QUEUE2+"] 接收到消息:"+message); } }
http://www.jsqmd.com/news/1204297/

相关文章:

  • Ubuntu 26.04升级必知的3大问题与解决方案
  • 具身智能落地实战:实时闭环、多模态同步与物理约束破解
  • 长沙欧米茄回收价格查询和各大平台实测排行(2026年7月最新数据) - 诚收名表回收平台
  • 浪琴中国官方售后服务中心|全新电话和详细网点地址权威信息通告(2026年7月最新) - 浪琴服务中心
  • Ubuntu 22.04国内镜像源配置指南
  • WSL2环境配置优化与常见问题解决方案
  • 2026年7月最新亨得利官方名表服务中心|详细地址和官方售后电话权威信息通告 - 亨得利官方
  • Windows系统优化工具:Chris Titus Tech实用指南
  • 2026年7月湖州高级感真丝丝巾/湖州送礼高端真丝丝巾供应商优选名单_湖州图康丝绸科技有限公司 - 品牌宣传支持者
  • ClawTeams 新手快速上手与实战部署指南
  • Ubuntu桌面美化:打造macOS风格主题完整指南
  • 人形机器人隐形冠军:0.01mm公差背后的国产供应链真相
  • 基于三星Artik 710硬件安全模块的AI翻译机本地数据加密实践
  • 专注音乐的科学原理与工程实践:提升深度工作效率
  • 2026年硕士毕业论文软件测评:学范文领衔5大平台横评与避坑指南
  • 具身智能工程落地:从大模型到物理世界毫秒级闭环
  • 2026年7月复古提花丝真丝丝巾/送礼高端真丝丝巾实力工厂推荐_湖州图康丝绸科技有限公司 - 行业平台推荐
  • 安心出门:基于智能眼镜与百宝箱工作流的第一视角随身物品检查助手
  • Windows 11下VMware Workstation安装与CentOS 7虚拟机配置指南
  • Grok Build CLI数据安全分析:验证AI编码工具的上传行为与防护方案
  • 雷达中国官方售后服务中心|服务热线及门店详细地址权威信息公告(2026年7月更新) - 亨得利钟表维修中心
  • 2026 年现阶段,济阳值得关注的模型供应商全面解析与选购指南,颠覆认知:普通人如何用它实现指数级增长? - 行业鉴选官
  • Windows系统KMS激活原理与免费合规方案详解
  • 工业机器人PROFINET通信故障诊断:Wireshark实战指南
  • Windows Terminal美化配置与性能优化指南
  • [Bug已解决] torch.nanmedian 指定 dim=None 报命名维度 RuntimeError(省略 dim 正常)解决方案
  • MCP协议:AI开发中的标准化通信与工具互操作性
  • LangChain4j实战:Java统一LLM应用开发框架与RAG实现
  • CW32开发板驱动OLED屏幕的SPI通信实现
  • 宇舶中国官方售后服务中心|服务热线及具体地址权威信息通知(2026年7月更新) - 亨得利官方服务中心