前言
本文介绍了通过最简单方法使用 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、或转发给予支持!转发请标明出处!