序言
本文给大家介绍如何使用 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) {@Overridepublic 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.xxxport: 5672virtual-host: /username: rabbitpassword: 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
- 动态切换数据源的最佳实践