序言
本文给大家介绍如何使用 Docker 单机部署 RabbitMQ 并与 SpringBoot 整合使用。
一、部署流程
-
拉取镜像
docker pull rabbitmq:3-management
-
镜像拉取成功之后使用下面命令启动 rabbitmq 容器
docker run \ # 指定用户名 -e RABBITMQ_DEFAULT_USER=username \ # 指定密码 -e RABBITMQ_DEFAULT_PASS=password \ # 指定容器名称 --name mq \ # 指定主机名称(任意) --hostname mq1 \ # WEB 浏览器访问端口 -p 15672:15672 \ # AMQP 协议端口 -p 5672:5672 \ # 后台启动 -d \ # 引用的镜像 rabbitmq:3-management
-
打开浏览器输入网址
localhost:15672
进入 RabbitMQ 管理页面
二、SpringBoot 整合 RabbitMQ
2.1 使用 RabbitMQ 客户端
-
引入依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.6</version> </parent> <!-- amqp 依赖--> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> </dependencies>
-
使用案例
public void static main() throws IOException, TimeoutException { // 配置连接 ConnectionFactory factory = new ConnectionFactory(); factory.setHost("xxx.xxx.xxx.xxx"); factory.setPort(5672); factory.setVirtualHost("/"); factory.setUsername("rabbit"); factory.setPassword("rabbit"); // 获取连接对象 Connection connection = factory.newConnection(); // 获取频道 Channel channel = connection.createChannel(); // 创建队列 String queueName = "simple.queue"; channel.queueDeclare(queueName, false, false, false, null); // 订阅消息 channel.basicConsume(queueName, true, new DefaultConsumer(channel) { @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { String msg = new String(body); System.out.println(msg); } }); }
2.2 使用 SpringAMQP
-
引入依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.6</version> </parent> <!-- amqp 依赖--> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> </dependencies>
-
application.yml
文件中编写配置spring: rabbitmq: host: xxx.xxx.xxx.xxx port: 5672 virtual-host: / username: rabbit password: rabbit
-
监听消息
@Component public class SpringRabbitListener { @RabbitListener(queues = "simple.queue") public void listenMessage(String msg) { System.out.println(msg); } }
-
发送消息
@Resource private RabbitTemplate rabbitTemplate; @Test public void sendTest() { // 需要发送的队列 String queueName = "simple.queue"; // 需要发送的消息 String msg = "This is a cool message!"; // 发送消息 rabbitTemplate.convertAndSend(queueName, msg); }
推荐阅读
- 深入了解 Arthas:Java 应用程序诊断利器
- 基于 AI 的数据库助手-Chat2DB
- EasyExcel 处理 Excel
- 实体映射解决方案-MapStruct
- 动态切换数据源的最佳实践