当前位置:

首页 > 编程开发 > Springboot怎么整合RabbitMQ消息队列

Springboot怎么整合RabbitMQ消息队列

生产者工程POM依赖可以在创建工程时直接选择添加依赖。application文件因为rabbitmq具有默认地址及用户信息,所以如果是本地rabbitmq可以不需要进行配置。RabbitMQ配置文件:在使用相关交换机及队列时,我们需要实现声明交换机及队列,如果没有对应信息,则启动项目会失败。所以在使用springboot整合rabbitmq时,我们可以通过配置文件来进行交换机、队列的声明及二者之间的关系绑定。由于目前在演示Fanout模式,所以使用FanoutExchange来声明交换机,其他模式则使用相

本文目录

      生产者工程

      POM依赖

      可以在创建工程时直接选择添加依赖。

      Springboot怎么整合RabbitMQ消息队列

      Springboot怎么整合RabbitMQ消息队列

      application文件

      因为rabbitmq具有默认地址及用户信息,所以如果是本地rabbitmq可以不需要进行配置。

      Springboot怎么整合RabbitMQ消息队列

      Springboot怎么整合RabbitMQ消息队列

      RabbitMQ配置文件:

      在使用相关交换机及队列时,我们需要实现声明交换机及队列,如果没有对应信息,则启动项目会失败。所以在使用springboot整合rabbitmq时,我们可以通过配置文件来进行交换机、队列的声明及二者之间的关系绑定。 由于目前在演示Fanout模式,所以使用FanoutExchange来声明交换机,其他模式则使用相对应的TopicExchange,DirectExchange来声明。

      @Configuration
      public class RabbitMQConfiguration {
      
      //声明fanout模式的交换机
      @Bean
      public FanoutExchange fanoutExchange() {
          return new FanoutExchange("fanout_order_exchange", true, false);
      }
      
      //声明队列
      @Bean
      public Queue smsQueue() {
          return new Queue("sms.fanout.queue", true);
      }
      
      @Bean
      public Queue emailQueue() {
          return new Queue("email.fanout.queue", true);
      }
      
      @Bean
      public Queue duanxinQueue() {
          return new Queue("duanxin.fanout.queue", true);
      }
      //绑定
      
      @Bean
      public Binding smsBinding() {
          return BindingBuilder.bind(smsQueue()).to(fanoutExchange());
      }
      
      @Bean
      public Binding emailBinding() {
          return BindingBuilder.bind(emailQueue()).to(fanoutExchange());
      }
      
      @Bean
      public Binding duanxinBinding() {
          return BindingBuilder.bind(duanxinQueue()).to(fanoutExchange());
      }
      }
      生产者业务代码

      这部分代码就简单的通过调用rabbitTemplate来进行消息的分发。@Service public class OrderService {

      @Autowired
      private RabbitTemplate rabbitTemplate;
      
      public void makeOrder() {
          // 保存订单
          String orderId = UUID.randomUUID().toString();
          System.out.println("下单成功:" + orderId);
          // 通过MQ完成消息的分发
          // 参数1:交换机 ;参数2:路由key/队列名;参数3:消息内容
          String exchangeName = "fanout_order_exchange";
          rabbitTemplate.convertAndSend(exchangeName, "", orderId);
      }
      }

      消费者:

      消费者工程和生产者工程类似,我们首先需要引入依赖,然后在application文件中进行相关的配置即可开始编写代码。 在消费者工程中我们也可以编写rabbitmq的配置文件来进行交换机及队列的声明。建议在消费端编写配置文件,因为消费端是先启动的工程,如果交换机和队列未创建会导致工程启动失败。 消息监听

      我们通过RabbitListener注解来监听消息队列。需要注意的是我们需要通过Component注解将该监听交给spring管理,否则不能正常接收服务端的消息。 这边只给出一个email的消息监听,上文生产者声明的duanxin,sms队列可以自行创建,只需要修改队列名即可。@Service public class OrderService {

      @RabbitListener(queues = {"email.fanout.queue"})
      @Component
      public class FanoutEmailService {
          @RabbitHandler
          public void receive(String message) {
              System.out.println("email fanout -----》接收到" + message);
          }
      }

      测试

      首先启动消费者工程,然后在生产者工程中创建测试类发送消息即可。

      @SpringBootTest class SpringbootOrderRabbitmqProducerApplicationTests {
      
      @Autowired
      private OrderService orderService;
      
      @Test
      void contextLoads() {
          orderService.makeOrder();
      }
      }

      当发送消息后,我们可以在控制台中发现消费者成功接受消息。

      Springboot怎么整合RabbitMQ消息队列

      Direct 模式

      生产者

      建立工程的步骤和上文相同。

      配置文件

      配置和上文基本相同,由于该部分测试direct模式,所以需要使用DirectExchange创建交换机。需要注意的是该类中的方法名不能和上文rabbitmq的配置文件中的方法名相同,因为我们使用bean注解将其交给spring管理,如果名字相同,则会启动项目失败。

      @Configuration
      public class DirectRabbitMQConfiguration {
      
      //声明direct模式的交换机
      @Bean
      public DirectExchange directExchange() {
          return new DirectExchange("direct_order_exchange", true, false);
      }
      
      //声明队列
      @Bean
      public Queue smsDirectQueue() {
          return new Queue("sms.direct.queue", true);
      }
      
      @Bean
      public Queue emailDirectQueue() {
          return new Queue("email.direct.queue", true);
      }
      
      @Bean
      public Queue duanxinDirectQueue() {
          return new Queue("duanxin.direct.queue", true);
      }
      //绑定
      
      @Bean
      public Binding smsDirectBinding() {
          return BindingBuilder.bind(smsDirectQueue()).to(directExchange()).with("sms");
      }
      
      @Bean
      public Binding emailDirectBinding() {
          return BindingBuilder.bind(emailDirectQueue()).to(directExchange()).with("email");
      }
      
      @Bean
      public Binding duanxinDirectBinding() {
          return BindingBuilder.bind(duanxinDirectQueue()).to(directExchange()).with("duanxin");
      }
      }

      业务代码

      @Service
      public class OrderService {
      
          @Autowired
          private RabbitTemplate rabbitTemplate;
      
          public void makeOrderDirect() {
              // 保存订单
              String orderId = UUID.randomUUID().toString();
              System.out.println("下单成功:" + orderId);
              String exchangeName = "direct_order_exchange";
              rabbitTemplate.convertAndSend(exchangeName, "sms", orderId);
              rabbitTemplate.convertAndSend(exchangeName, "email", orderId);
          }
      
      }

      消费者

      消息监听

      和上文相同,只需注意队列名即可。

      @RabbitListener(queues = {"email.direct.queue"})
      @Component
      public class DirectEmailService {
          @RabbitHandler
          public void receive(String message) {
              System.out.println("email direct -----》接收到" + message);
          }
      }

      Topic 模式

      上文中个模式都是通过配置文件来声明交换机,队列及绑定二者之间的关系;实际上我们还可以通过注解的方式来声明交换机及注解。

      生产者

      由于使用注解方式声明,所以我们不需要创建配置文件,直接编写业务代码即可。测试的时候我们只需修改路由名即可,具体如何修改,请前往文章开头链接查看各模式是如何使用的。

      @Service
      public class OrderService {
      
      @Autowired
      private RabbitTemplate rabbitTemplate;
      
      public void makeOrderTopic() {
          // 保存订单
          String orderId = UUID.randomUUID().toString();
          System.out.println("下单成功:" + orderId);
          String exchangeName = "topic_order_exchange";
          String routingKey = "com.email";
          rabbitTemplate.convertAndSend(exchangeName, routingKey, orderId);
      }
      }

      消费者

      代码和上文基本相同,区别在于我们直接在RabbitListener注解中将队列和交换机进行绑定。需要注意的是各参数中都是使用字符串。 value对应的是队列,相应的参数分别是队列名、持久化、自动删除。 exchange对应的交换机,相应的参数分别是交换机名以及交换机类型。 key对应的是路由名。

      @RabbitListener(bindings = @QueueBinding(
              value = @Queue(value = "email.topic.queue",durable = "true",autoDelete = "false"),
              exchange = @Exchange(value = "topic_order_exchange",type = ExchangeTypes.TOPIC),
              key = "*.email.#"
      ))
      @Component
      public class TopicEmailService {
          @RabbitHandler
          public void receive(String message) {
              System.out.println("email topic -----》接收到" + message);
          }
      }
      本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
      作者最新文章
      编程开发
      相关文章 更多
      RabbitMQ Fanout Exchange 多消费者正确实现指南
      RabbitMQ Fanout Exchange 多消费者正确实现指南

      在Go中使用RabbitMQFanoutExchange时,多个消费者需同时接收消息。正确做法是声明fanout类型交换器,并为每个消费者创建独立队列并绑定到该交换器,确保交换器类型正确、队列名唯一,RabbitMQ会将消息广播至所有绑定队列,实现一对多分发。

      Centos 6.4 安装erlang&rabbitmq的方法
      Centos 6.4 安装erlang&rabbitmq的方法

      在开始搭建消息队列服务之前,得先搞定两个核心组件:Erlang 和 RabbitMQ。Erlang 是 RabbitMQ 的运行时环境,所以顺序不能乱——先装 Erlang,再装 RabbitMQ。下面把整个过程拆开来讲,每一步都配了具体的命令,照着走基本不会出错。 1. 安装 Erlang 1.1

      Symfony 将RabbitMQ消息转为数组方法
      Symfony 将RabbitMQ消息转为数组方法

      答案:将Symfony中RabbitMQ消息转为数组需根据消息体格式选择反序列化方式,常见为JSON或PHP序列化;若为JSON,使用json_decode($messageBody,true)转换并校验错误;若为PHP序列化,使用unserialize()但需注意安全风险;其他格式则用对应解析器;若消息封装在对象中,需先提取消息体。

      Python RabbitMQ教程:消息队列入门指南
      Python RabbitMQ教程:消息队列入门指南

      Python操作RabbitMQ的关键在于理解其消息队列流程和工作机制,安装pika库后即可通过简单步骤实现消息发送与接收。首先需安装pika:pipinstallpika,并确保RabbitMQ服务运行;其次,发送消息时需建立连接、打开通道、声明队列并发送消息;接着,接收消息时需监听队列、定义回调函数处理消息,并注意确认机制与连接关闭;此外,实际应用中应关注异常处理、消息持久化、多消费者支持及死信队列等特性以提升系统健壮性。掌握这些步骤和注意事项后,Python结合RabbitMQ的基础操作便能快速上手

      PHP实战:RabbitMQ消息队列详解
      PHP实战:RabbitMQ消息队列详解

      PHP结合RabbitMQ构建异步处理系统需安装RabbitMQ和AMQP扩展1,通过AMQP类连接服务器2,声明交换机和队列并绑定路由键3,使用publish方法发布消息4,利用consume消费消息并调用ack确认5,为避免消息丢失应启用持久化、发布者确认或事务机制6,可通过RabbitMQManagementPlugin、命令行工具或Prometheus+Grafana监控性能7,配置死信队列处理无法消费的消息8,保证消息顺序可通过单消费者、单一队列或分组排序等策略实现9。

      springBoot项目常用目录有哪些
      springBoot项目常用目录有哪些

      springBoot项目常用目录springBoot项目的目录结构及名规范介绍基于SpringBoot开发时的目录结构及命名规范,通过介绍能够为你解决,在实际项目中如何规划目录结构?如何命名目录更规范?各个目录分别代表什么含义?等三个问题。目录说明servicex//项目名|-admin-ui//管理服务前端代码(一般将UI和SERVICE放到一个工程中,便于管理)|-servicex-auth//模块1|-servicex-common//模块2|-servicex-gateway//模块3|-serv

      学习如何安装、配置、部署和使用宝塔面板中的RabbitMQ可视化工具
      学习如何安装、配置、部署和使用宝塔面板中的RabbitMQ可视化工具

      RabbitMQ是一款开源的消息代理和队列服务器,旨在通过通用协议实现不同应用之间的数据共享,实现跨平台和跨语言的通信。该系统采用Erlang语言编写,并基于AMQP协议。其最显著的特点之一是在提供高度解耦的服务之间无需确保提供方的存在。接下来介绍关于如何在宝塔面板上可视化安装、配置、部署、使用RabbitMQ。一、RabbitMQ的特点1.可靠性RabbitMQ通过诸如持久化、传输确认和发布确认等机制来确保消息的可靠性。2.灵活的路由消息在进入队列之前通过交换器进行路由,可按照特定规则进行灵活分发。3.

      PHP开发中如何使用RabbitMQ实现消息传递
      PHP开发中如何使用RabbitMQ实现消息传递

      RabbitMQ是一种消息队列软件,可用于在应用程序之间进行消息传递。在PHP开发中,使用RabbitMQ可以实现异步处理任务、实现分布式系统等。本篇文章将介绍如何在PHP开发中使用RabbitMQ实现消息传递。一、安装RabbitMQ服务RabbitMQ是开源软件,可从其官网(https://www.rabbitmq.com/download.html)下

      PHP与RabbitMQ结合实现消息队列处理和分发的方法
      PHP与RabbitMQ结合实现消息队列处理和分发的方法

      随着互联网业务的不断发展,系统间的数据交换变得越来越频繁。在传统的请求响应式架构中,数据传递的方式往往是同步的,即等待请求响应结果后才能进行下一步操作,当数据量较大或者请求响应时间较长时,这种方式往往会导致系统性能下降。此时,消息队列就成为一种比较理想的解决方案,可以实现异步、解耦、扩展性好等优点。RabbitMQ作为一款消息队列中间件,提供了丰富的API,

      比较RabbitMQ和Kafka:如何选择高效的消息中间件
      比较RabbitMQ和Kafka:如何选择高效的消息中间件

      RabbitMQ和Kafka的比较:选择高效的消息中间件简介消息中间件是一种软件,它允许应用程序通过异步消息传递进行通信。消息中间件可以用于各种目的,包括:解耦应用程序:消息中间件可以将应用程序解耦,使它们能够独立于彼此开发和部署。提高可伸缩性:消息中间件可以帮助应用程序提高可伸缩性,使它们能够处理更多的并发请求。提高可靠性:消息中间件可以帮助应用程序提高可

      查看更多
      精品专题 更多
      装机必备
      装机必备

      正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

      Windows
      Windows

      正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

      PDF教程
      PDF教程

      正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

      Mac软件 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      Aperty macOS版
      Aperty macOS版
      macOS

      Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

      WINDOWS 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      PixTV 网页版
      PixTV 网页版
      Windows

      PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。