Appearance
RabbitMQ SpringBoot整合MQ
本文介绍如何在Spring Boot中整合RabbitMQ。
1. 引入依赖
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>2. 修改配置
2.1 配置RabbitMQ用户与权限
创建新用户:
rabbitmqctl add_user <username> <password><username>: 你想要创建的用户名。<password>: 用户的密码。
例如:
bash
rabbitmqctl add_user app 123456为创建的用户配置权限:
bash
rabbitmqctl set_permissions -p <vhost_name> <username> "<configure_regex>" "<write_regex>" "<read_regex>"-p <vhost_name>: 指定要设置权限的虚拟主机名称。如果你想在默认的 vhost (/) 中设置,则使用-p /。<username>: 刚才创建的用户名。<configure_regex>: 一个正则表达式,定义用户可以配置(创建/删除)哪些队列和交换机。<write_regex>: 一个正则表达式,定义用户可以向哪些交换机发布消息。<read_regex>: 一个正则表达式,定义用户可以从哪些队列消费消息。
例如:
bash
rabbitmqctl set_permissions -p / app ".*" ".*" ".*"2.2 修改配置文件
在application.properties配置文件中增加RabbitMQ的相关配置:
properties
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=app
spring.rabbitmq.password=1234563. 生产者代码
在Spring Boot Amqp中,提供了AmqpTemplate类对象来操作发送消息,我们只需要注入该对象,调用该对象的convertAndSend()方法即可:
java
@RestController
public class RabbitMQController {
@Resource
private AmqpTemplate rabbitMQTemplate;
@PostMapping("/sendMessage")
public String sendMessage(@RequestBody MQSendMessage message){
rabbitMQTemplate.convertAndSend(message.getExchange(),
message.getRouteKey(),
message.getMessage()
);
return "ok";
}
}java
@Data
public class MQSendMessage {
private String exchange;
private String routeKey;
private String message;
}convertAndSend()方法有三个参数:
- 第一个参数:交换机名称;
- 第二个参数:路由规则;
- 第三个参数:要发送的消息内容;
在Postman中测试如下:

在RabbitMQ管理界面中查看,消息已成功发送到消息队列:

4. 消费者代码
在Spring Boot中,可以在容器内的实体的方法上标注@RabbitListener注解,用于声明该方法为消费消息的方法,注解参数queues用于指明监听的队列名,方法参数Message用于接收消息:
java
@Slf4j
@Component
public class RabbitMQListener {
@RabbitListener(queues = {"route_queue_2"})
public void processMessage(Message message){
String data = new String(message.getBody());
log.info(data);
}
}5. [可选]配置代码
我们可以在Spring Boot中通过配置代码,创建交换机和队列,并制定绑定关系:
java
@Configuration
public class RabbitMQConfig {
// 队列名称
public static final String QUEUE_NAME = "queue.springboot.test";
// 交换机名称
public static final String EXCHANGE_NAME = "exchange.springboot.test";
// 路由键
public static final String ROUTING_KEY = "routing.springboot.test";
// 声明队列
@Bean
public Queue queue() {
// 第二个参数表示该队列是否为持久化的
return new Queue(QUEUE_NAME, true);
}
// 声明交换机
@Bean
public DirectExchange directExchange() {
return new DirectExchange(EXCHANGE_NAME);
}
// 将队列绑定到交换机,并指定路由键
@Bean
public Binding binding(Queue queue, DirectExchange directExchange) {
return BindingBuilder.bind(queue).to(directExchange).with(ROUTING_KEY);
}
}启动Spring Boot项目,然后查看RabbitMQ管理界面,可以看到交换机和队列已成功创建:
