SpringBoot 2 快速整合 RabbitMQ
前言
本文介绍了通过最简单方法使用 SpringBoot 2 整合 RabbitMQ,带你快速上手 RabbitMQ 的操作。
操作前需要先安装 RabbitMQ 服务。Windows 系统可以参考 Windows 环境安装 RabbitMQ
快速整合操作
-
首先在 pom.xml 中引入 spring-boot-starter-amqp starter 依赖。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>
-
在配置文件中添加 RabbitMQ 的相关配置,必选配置如下:
# RabbitMQ 主机IP spring.rabbitmq.host=127.0.0.1 # RabbitMQ 端口号 spring.rabbitmq.port=5672 # RabbitMQ 用户名 spring.rabbitmq.username=guest # RabbitMQ 密码 spring.rabbitmq.password=guest
-
创建队列
主要是定义队列的名称,SpringBoot 使用 Queue对象进行定义。@Configuration public class RabbitMQConfig { public static final String QUEUE = "queue"; @Bean public Queue queue() { return new Queue(QUEUE,true); } }
Queue 构造器第一个参数是队列的名称,第二个参数表示是否持久化该队列。如果我们声 明一个持久队列,则持久为真(该队列将在服务器重新启动后继续存在)
-
创建发送者
SpringBoot 为我们提供了 AmqpTemplate 它定义很多发送消息的 api。@Service public class RabbitMQSend { private static Logger log = LoggerFactory.getLogger(RabbitMQSend.class); @Autowired private AmqpTemplate amqpTemplate ; public void send(Object message) { amqpTemplate.convertAndSend(RabbitMQConfig.QUEUE, message); } }
-
创建接受者
在方法上声明 @RabbitListener,在@RabbitListener中指定使用的队列名称,并在该方法中定义String 类型消息参数。@Service public class RabbitReceiver { private static Logger log = LoggerFactory.getLogger(RabbitReceiver.class); /** * Direct 模式 交换机模式 * @param message */ @RabbitListener(queues=RabbitMQConfig.QUEUE) public void receive(String message) { log.info("receive message:"+message); } /** * Direct 模式 交换机模式 * @param message */ @RabbitListener(queues=RabbitMQConfig.QUEUE) public void receive2(String message) { log.info("receive2 message:"+message); } }
测试
1 定义发送消息的Controller
@RestController @RequestMapping("/rabbitMQDemo") public class RabbitMQDemoController { @Autowired private RabbitMQSend send; @RequestMapping("/helloworld") public String helloword(@RequestParam("msg") String msg) { send.send(msg); return "发送成功!"; } }
2 通过 Jmeter 进行测试
创建20个线程访问 RabbitMQDemoController。
测试结果如下:
- 2019-07-27 19:09:35.549 INFO 5716 — [cTaskExecutor-1]
c.l.rabbitmq.helloworld.RabbitReceiver : receive message:2123 - 2019-07-27 19:09:35.603 INFO 5716 — [TaskExecutor-10]
c.l.rabbitmq.helloworld.RabbitReceiver : receive message:2123 - 2019-07-27 19:09:35.668 INFO 5716 — [cTaskExecutor-9]
c.l.rabbitmq.helloworld.RabbitReceiver : receive message:2123 - 2019-07-27 19:09:35.717 INFO 5716 — [cTaskExecutor-3]
c.l.rabbitmq.helloworld.RabbitReceiver : receive message:2123 - 2019-07-27 19:09:35.760 INFO 5716 — [cTaskExecutor-7]
c.l.rabbitmq.helloworld.RabbitReceiver : receive message:2123 - 2019-07-27 19:09:35.834 INFO 5716 — [cTaskExecutor-6]
c.l.rabbitmq.helloworld.RabbitReceiver : receive message:2123 - 2019-07-27 19:09:35.867 INFO 5716 — [cTaskExecutor-5]
c.l.rabbitmq.helloworld.RabbitReceiver : receive message:2123 - 2019-07-27 19:09:35.916 INFO 5716 — [cTaskExecutor-4]
c.l.rabbitmq.helloworld.RabbitReceiver : receive message:2123 - 2019-07-27 19:09:35.961 INFO 5716 — [cTaskExecutor-8]
c.l.rabbitmq.helloworld.RabbitReceiver : receive message:2123 - 2019-07-27 19:09:36.010 INFO 5716 — [cTaskExecutor-2]
c.l.rabbitmq.helloworld.RabbitReceiver : receive message:2123 - 2019-07-27 19:09:36.059 INFO 5716 — [cTaskExecutor-1]
c.l.rabbitmq.helloworld.RabbitReceiver : receive2 message:2123 - 2019-07-27 19:09:36.107 INFO 5716 — [cTaskExecutor-8]
c.l.rabbitmq.helloworld.RabbitReceiver : receive2 message:2123 - 2019-07-27 19:09:36.156 INFO 5716 — [TaskExecutor-10]
c.l.rabbitmq.helloworld.RabbitReceiver : receive2 message:2123 - 2019-07-27 19:09:36.209 INFO 5716 — [cTaskExecutor-6]
c.l.rabbitmq.helloworld.RabbitReceiver : receive2 message:2123 - 2019-07-27 19:09:36.258 INFO 5716 — [cTaskExecutor-7]
c.l.rabbitmq.helloworld.RabbitReceiver : receive2 message:2123 - 2019-07-27 19:09:36.308 INFO 5716 — [cTaskExecutor-3]
c.l.rabbitmq.helloworld.RabbitReceiver : receive2 message:2123 - 2019-07-27 19:09:36.355 INFO 5716 — [cTaskExecutor-5]
c.l.rabbitmq.helloworld.RabbitReceiver : receive2 message:2123 - 2019-07-27 19:09:36.403 INFO 5716 — [cTaskExecutor-4]
c.l.rabbitmq.helloworld.RabbitReceiver : receive2 message:2123 - 2019-07-27 19:09:36.462 INFO 5716 — [cTaskExecutor-2]
c.l.rabbitmq.helloworld.RabbitReceiver : receive2 message:2123 - 2019-07-27 19:09:36.509 INFO 5716 — [cTaskExecutor-9]
c.l.rabbitmq.helloworld.RabbitReceiver : receive2 message:2123
小结
SpringBoot 通过自带 AmqpTemplate 操作 RabbitMQ 非常的简单,我们只需要定义队列、发送者(通过 AmqpTemplate 发送 api )、接受者 (在方法上 @RabbitListener)即可完成简单的操作。需要注意的是:发送者和接收者的队列名称 必须一样,否则消息会接受不到。
代码示例
具体代码示例请查看 :
博客的读者可以通过查看下面仓库的中的模块工程名: spring-boot-2.x-rabbit-mq
Github:https://github.com/zhuoqianmingyue/springbootexamples/tree/master/spring-boot-2.x-rabbit-mq
如果您对这些感兴趣,欢迎 star、或转发给予支持!转发请标明出处!
- 快速搭建springboot框架以及整合ssm+shiro+安装Rabbitmq和Erlang、Mysql下载与配置
- SpringBoot非官方教程 | 第十五篇:Springboot整合RabbitMQ
- SpringBoot2.0应用(三):SpringBoot2.0整合RabbitMQ
- Spring boot 整合RabbitMq有简单到深入
- SpringBoot2.0源码分析(三):整合RabbitMQ分析
- Rabbitmq 整合Spring,SpringBoot与Docker
- Spring Boot教程(二十五)关于RabbitMQ服务器整合
- SpringBoot整合Spring Data Jpa(快速入门,自定义查询)
- springboot整合 rabbitmq
- spring boot整合RabbitMQ(Direct模式)
- Spring Boot -- 整合RabbitMQ消息队列
- springboot整合rabbitmq,支持消息确认机制
- SpringBoot系列八:SpringBoot整合消息服务(SpringBoot 整合 ActiveMQ、SpringBoot 整合 RabbitMQ、SpringBoot 整合 Kafka)
- SpringBoot整合RabbitMQ
- spring boot 1.5.4 整合rabbitMQ(十七)
- Spring Boot 整合 RabbitMQ
- spring boot实战(第十四篇)整合RabbitMQ源码分析前言
- spring boot整合RabbitMQ(Topic模式)
- springboot整合mybatis 快速入门