SpringBoot怎么集成RabbitMQ
作者:慢热型
时间:2023-05-11
来源:互联网
浏览:0
SpringBoot集成RabbitMQ首先搭建SpringBoot项目,在POMXML文件中添加如下依赖org.springframework.bootspring-boot-starter-amqporg.springframework.bootspring-boot-starter-web修改配置文件,添加如下RabbitMQ配置服务器:port:8888#设置端口号Spring:rabbitMQ:host:127.0.0.1#设置RabbitMQ的主机port:5672#设置RabbitMQ服务端
SpringBoot 集成 RabbitMQ
首先搭建SpringBoot项目,在POM XML文件中添加如下依赖
<依赖>org.springframework.boot spring-boot-starter-amqp 依赖><依赖>org.springframework.boot spring-boot-starter-web 依赖>
修改配置文件,添加如下RabbitMQ配置
服务器: port: 8888 # 设置端口号Spring: rabbitMQ: host: 127.0.0.1 # 设置 RabbitMQ 的主机 port: 5672 # 设置 RabbitMQ 服务端口 username: guest # 设置 RabbitMQ 用户名 password: guest # 设置 RabbitMQ 密码
新的公共常量类
public interface RabbitConstant {
/**
* 简单模式
*/
String SIMPLE_QUEUE_NAME = "simple_queue";
/**
* 工作模式
*/
String WORK_QUEUE_NAME = "work_queue";
/**
* 发布/订阅模式
*/
String PUBLISH_SUBSCRIBE_EXCHANGE_NAME = "publish_subscribe_exchange";
字符串 PUBLISH_SUBSCRIBE_FIRST_QUEUE_NAME = "publish_subscribe_first_queue";
字符串 PUBLISH_SUBSCRIBE_SECOND_QUEUE_NAME = "publish_subscribe_second_queue";
/**
* 路由模式
*/
String ROUTING_EXCHANGE_NAME = "routing_exchange";
字符串 ROUTING_FIRST_QUEUE_NAME = "routing_first_queue";
字符串 ROUTING_SECOND_QUEUE_NAME = "routing_second_queue";
字符串 ROUTING_THIRD_QUEUE_NAME = "routing_third_queue";
字符串 ROUTING_FIRST_QUEUE_ROUTING_KEY_NAME = "routing_first_queue_routing_key";
字符串 ROUTING_SECOND_QUEUE_ROUTING_KEY_NAME = "routing_second_queue_routing_key";
字符串 ROUTING_THIRD_QUEUE_ROUTING_KEY_NAME = "routing_third_queue_routing_key";
/**
* 主题模式
*/
String TOPICS_EXCHANGE_NAME = "topics_exchange";
字符串 TOPICS_FIRST_QUEUE_NAME = "topics_first_queue";
字符串 TOPICS_SECOND_QUEUE_NAME = "
字符串 TOPICS_THIRD_QUEUE_NAME = "topics_third_queue";
String TOPICS_FIRST_QUEUE_ROUTING_KEY = "topics.first.routing.key";
String TOPICS_SECOND_QUEUE_ROUTING_KEY = "topics.second.routing.key";
String TOPICS_THIRD_QUEUE_ROUTING_KEY = "topics.third.routing.key";
字符串 TOPICS_ROUTING_KEY_FIRST_WILDCARD = "#.first.#";
字符串 TOPICS_ROUTING_KEY_SECOND_WILDCARD = "*.second.#";
字符串 TOPICS_ROUTING_KEY_THRID_WILDCARD = "*.third.*";
/**
* 标题模式
*/
String HEADER_EXCHANGE_NAME = "header_exchange";
字符串 HEADER_FIRST_QUEUE_NAME = "header_first_queue";
字符串 HEADER_SECOND_QUEUE_NAME = "header_second_queue";
/**
* rpc 模式
*/
String RPC_QUEUE_NAME = "rpc_queue";
}添加一个Controller请求类(用于验证结果,最后可以添加)
导入 com.example.rabbitmq.constant.RabbitConstant;
导入 org.springframework.amqp.core.Message;
导入 org.springframework.amqp.core.MessageProperties;
导入 org.springframework.amqp.rabbit.core.RabbitTemplate;
导入 org.springframework.beans.factory.annotation.Autowired;
导入 org.springframework.web.bind.annotation.GetMapping;
导入 org.springframework.web.bind.annotation.RestController;
导入 java.nio.charset.StandardCharsets;@RestController public class RabbitController {
@Autowired
private RabbitTemplate rabbitTemplate;
@GetMapping(value = "/simple")
public void simple() {
rabbitTemplate.convertAndSend(RabbitConstant.SIMPLE_QUEUE_NAME, "你好世界!");
}
@GetMapping(value = "/work")
public void work() {
rabbitTemplate.convertAndSend(RabbitConstant.WORK_QUEUE_NAME, "work hello!");
}
@GetMapping(value = "/pubsub")
public void pubsub() {
rabbitTemplate.convertAndSend(RabbitConstant.PUBLISH_SUBSCRIBE_EXCHANGE_NAME, null, "发布/订阅你好");
}
@GetMapping(value = "/routing")
public void routing() {
// 向第一个队列发送消息
rabbitTemplate.convertAndSend(RabbitConstant.ROUTING_EXCHANGE_NAME, RabbitConstant.ROUTING_FIRST_QUEUE_ROUTING_KEY_NAME, "路由你好");
}
@GetMapping(value = "/topics")
public void topics() {
// 向第一个队列发送消息。这时候队列可以接收到消息,因为队列的通配符是#first.#,而routing_key是topics first。路由。键,匹配成功
rabbitTemplate.convertAndSend(RabbitConstant.TOPICS_EXCHANGE_NAME, RabbitConstant.TOPICS_FIRST_QUEUE_ROUTING_KEY, "topics hello"); // 向第二个队列发送消息。这时候队列也能收到消息了,因为队列的通配符是*秒#,而routing_key是topic秒。路由。键,匹配成功
rabbitTemplate.convertAndSend(RabbitConstant.TOPICS_EXCHANGE_NAME, RabbitConstant.TOPICS_SECOND_QUEUE_ROUTING_KEY, "topics hello");
// 向第三个队列发送消息。此时队列无法接受消息,因为队列通配符是*第三个*,而routing_key是topics第三个。路由。键,匹配失败
rabbitTemplate.convertAndSend(RabbitConstant.TOPICS_EXCHANGE_NAME, RabbitConstant.TOPICS_THIRD_QUEUE_ROUTING_KEY, "topics hello");
}
@GetMapping(value = "/header") public void header() {
// 这个消息应该被两个队列接收。第一个队列全部匹配成功,第二个队列 Hello 值任意匹配成功
MessageProperties messageProperties = new MessageProperties();
messageProperties.setHeader("matchAll", "YES");
messageProperties.setHeader("你好", "world");
Message message = new Message("header first hello".getBytes(StandardCharsets.UTF_8), messageProperties);
rabbitTemplate.convertAndSend(RabbitConstant.HEADER_EXCHANGE_NAME, null, message);
// 这个消息应该只被第二个队列接受。第一个队列全部匹配失败,
MessageProperties messagePropertiesSecond = new MessageProperties();
messagePropertiesSecond.setHeader("matchAll", "NO");
Message messageSecond = new Message("header second hello".getBytes(StandardCharsets.UTF_8), messagePropertiesSecond);
rabbitTemplate.convertAndSend(RabbitConstant.HEADER_EXCHANGE_NAME, null, messageSecond);
}
@GetMapping(value = "/rpc")
public void rpc() {
Object responseMsg = rabbitTemplate.convertSendAndReceive(RabbitConstant.RPC_QUEUE_NAME, "rpc hello!");
System.out.println("rabbit rpc 响应消息:" + responseMsg);
}
}
作者最新文章
网易2026年Q2财报:营收301亿元,游戏收入增10%,三款重点新游披露进展
2026-09-08 17:51
PDF怎么添加页码?页码位置和起始页怎么设置?
2026-09-03 09:11
图片文件怎么转换成PDF?多张图片如何按顺序合成?
2026-09-02 19:33
CorelDRAW绘制正弦曲线的两种方法:贝塞尔工具与变形工具
2026-09-02 16:08
Excel工作表制作教程:设计易填写、易统计的业务表
2026-09-02 12:11
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多
Windows 10
Windows
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式
Windows/macOS/Linux
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















