RabbitMQ的安装与使用详解(RabbitMQ与springboot整合)_rabbitm部署和使用
RabbitMQ
- 前言
- 一、RabbitMQ简介
-
- 核心特点:
- 二、安装 RabbitMQ
-
- 1. 安装环境准备
- 2. 验证安装
- 三、RabbitMQ 的基本概念
- 四、使用示例(RabbitMQ与springboot整合)
-
- 1. Direct 模式
- 2. Topic模式
- 总结
前言
在日常开发中,消息队列已经成为后端架构中不可或缺的一环。RabbitMQ 作为一款稳定、易用的消息中间件,被广泛应用于微服务解耦、异步任务处理、流量削峰等场景。本文将带你快速上手 RabbitMQ,从安装部署到代码示例,循序渐进地了解它的基本使用方法,适合初学者和希望回顾基础的开发者。
一、RabbitMQ简介
RabbitMQ 是一个开源的消息代理(Message Broker),实现了高级消息队列协议(AMQP),常用于微服务、异步通信、解耦系统等场景。
核心特点:
- 支持多种消息协议(AMQP、STOMP、MQTT)
- 提供可靠的消息投递机制
- 易于安装与部署
- 提供强大的可视化管理界面
二、安装 RabbitMQ
1. 安装环境准备
推荐使用 Linux(如 Ubuntu)或 macOS,也支持 Windows。
- Ubuntu(Debian)系统
# 安装 Erlang(RabbitMQ 依赖)sudo apt updatesudo apt install erlang -y# 安装 RabbitMQsudo apt install rabbitmq-server -y# 启动 RabbitMQ 服务sudo systemctl start rabbitmq-serversudo systemctl enable rabbitmq-server
启用 Web 管理界面
sudo rabbitmq-plugins enable rabbitmq_management
默认管理界面地址:http://localhost:15672
默认账号密码:guest/guest
- macOS(使用 Homebrew)
brew updatebrew install rabbitmq# 启动服务brew services start rabbitmq
启用 Web 管理界面
sudo rabbitmq-plugins enable rabbitmq_management
默认管理界面地址:http://localhost:15672
默认账号密码:guest/guest
- Windows
RabbitMQ 可以运行在 Windows 上,但需要依赖 Erlang 运行时。以下是一步步的安装流程。
RabbitMQ 依赖 Erlang,因此必须 先安装 Erlang,再安装 RabbitMQ。
建议顺序:
- 安装 Erlang
- 安装 RabbitMQ
- 配置环境变量(如需要)
- 启用并访问 Web 管理界面
1.下载 Erlang
- 前往 Erlang 官网:https://www.erlang.org/downloads
- 下载与你的操作系统(64 位)和 RabbitMQ 兼容的版本,建议使用官方推荐的 OTP 版本(可在 RabbitMQ 官网查到对应 Erlang 的版本匹配)。
⚠️ 版本不匹配是 Windows 安装失败的主要原因之一。
RabbitMQ 官网兼容性表:👉 https://www.rabbitmq.com/which-erlang.html
安装 Erlang,默认路径如:C:\\Program Files\\Erlang OTP XX
也可指定安装路径如:D:\\DevSoftware\\Erlang\\erl-28.0
安装完毕之后需要配置环境变量:ERLANG_HOME=D:\\DevSoftware\\Erlang\\erl-28.0
- 下载 RabbitMQ
前往 RabbitMQ 官方下载页面:https://www.rabbitmq.com/download.html
选择 “Windows Installer” (.exe) 版本。
双击运行并安装,默认安装目录:C:\\Program Files\\RabbitMQ Server
也可指定安装路径如:D:\\DevSoftware\\RabbitMQ\\rabbitmq_server-4.1.1
安装完毕之后需要配置环境变量:RABBITMQ_SERVER=D:\\DevSoftware\\RabbitMQ\\rabbitmq_server-4.1.1
最后在path中加入:%RABBITMQ_SERVER%\\sbin
- 启动 RabbitMQ 服务
安装完毕后,可以使用命令行启动:
# 安装rabbitmq的服务rabbitmq-service install# 启动rabbitmq的服务rabbitmq-service start
- 启用 Web 管理插件
RabbitMQ 自带 Web 管理页面,只需启用插件:
rabbitmq-plugins enable rabbitmq_management
默认访问地址:
- http://localhost:15672
- 默认账号密码为:guest / guest
2. 验证安装
- 打开浏览器,访问 http://localhost:15672
- 登录后你将看到 RabbitMQ 的控制面板(Queues、Exchanges、Connections 等)
❗ 常见问题及解决办法
三、RabbitMQ 的基本概念
- Producer:消息生产者
- Consumer:消息消费者
- Queue:消息队列
- Exchange:交换机,决定消息如何路由到队列
- Binding:绑定关系,连接交换机和队列
四、使用示例(RabbitMQ与springboot整合)
1. Direct 模式
🧱 项目结构
springboot-rabbitmq-demo/├── pom.xml└── src/ ├── main/ │ ├── java/com/example/demo/ │ │ ├── DemoApplication.java │ │ ├── config/RabbitMQConfig.java │ │ ├── producer/MessageProducer.java │ │ └── consumer/MessageConsumer.java │ └── resources/ │ └── application.yml
🧰 1. 添加 Maven 依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId></dependency>
⚙️ 2. 配置 RabbitMQ(application.yml)
spring: rabbitmq: host: localhost port: 5672 username: guest password: guest# 可选:设置默认交换机、队列等
🔧 3. RabbitMQ 基础配置类
@Configurationpublic class RabbitMQConfig { public static final String QUEUE_NAME = \"demo.queue\"; public static final String EXCHANGE_NAME = \"demo.exchange\"; public static final String ROUTING_KEY = \"demo.key\"; @Bean public Queue queue() { return new Queue(QUEUE_NAME, true); // durable } @Bean public DirectExchange exchange() { return new DirectExchange(EXCHANGE_NAME); } @Bean public Binding binding(Queue queue, DirectExchange exchange) { return BindingBuilder.bind(queue).to(exchange).with(ROUTING_KEY); }}
📤 4. 发送消息的 Producer
@Componentpublic class MessageProducer { @Autowired private RabbitTemplate rabbitTemplate; public void send(String message) { rabbitTemplate.convertAndSend( RabbitMQConfig.EXCHANGE_NAME, RabbitMQConfig.ROUTING_KEY, message ); System.out.println(\" [x] Sent: \" + message); }}
📥 5. 接收消息的 Consumer
@Componentpublic class MessageConsumer { @RabbitListener(queues = RabbitMQConfig.QUEUE_NAME) public void receive(String message) { System.out.println(\" [x] Received: \" + message); }}
🚀 6. 启动类中测试发送
@SpringBootApplicationpublic class DemoApplication implements CommandLineRunner { @Autowired private MessageProducer messageProducer; public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } @Override public void run(String... args) { messageProducer.send(\"Hello from Spring Boot and RabbitMQ!\"); }}
✅ 输出效果
[x] Sent: Hello from Spring Boot and RabbitMQ![x] Received: Hello from Spring Boot and RabbitMQ!
2. Topic模式
🧱 项目结构
springboot-rabbitmq-demo/├── pom.xml└── src/ ├── main/ │ ├── java/com/example/demo/topic │ │ ├── DemoApplication.java │ │ ├── config/MQConfig.java │ │ ├── constant/MQConst.java │ │ ├── dto/SmsDTO.java │ │ ├── receiver/SmsReceiver.java │ │ └── service/MQService.java │ └── resources/ │ └── application.yml
🧰 1. 添加 Maven 依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>
⚙️ 2. 配置 RabbitMQ(application.yml)
spring: rabbitmq: host: localhost port: 5672 username: guest password: guest# 可选:设置默认交换机、队列等
🔧 3. RabbitMQ 基础配置类
/** * RabbitMQ配置类 */@Configurationpublic class MQConfig { @Bean public MessageConverter messageConverter(){ //json字符串转换器 return new Jackson2JsonMessageConverter(); }}
📤 4. 常量类
/** * MQ常量类 * 用于定义RabbitMQ相关的交换机、路由和队列名称 */public class MQConst { public static final String EXCHANGE_TOPIC_SMS = \"exchange.topic.sms\";//交换机 public static final String ROUTING_SMS_ITEM = \"routing.sms.item\";//路由 public static final String QUEUE_SMS_ITEM = \"queue.sms.item\";//消息队列}
- 数据传输对象
/** * 短信数据传输对象 */@Datapublic class SmsDTO { private String mobile; private String message;}
- 接收消息的 Consumer
🟢 @RabbitListener
用于声明这个方法是一个消息监听器,会自动绑定队列、交换机,并监听消息。
🟢 @QueueBinding
组合绑定关系的注解,用于定义队列、交换机、RoutingKey 的绑定关系:
value = @Queue(…):声明一个队列
MQConst.QUEUE_SMS_ITEM:一个常量,表示队列名称
durable = “true”:队列持久化,服务重启后仍然存在
exchange = @Exchange(…):声明一个交换机
MQConst.EXCHANGE_TOPIC_SMS:常量,表示交换机名称
没有指定 type,默认是 topic 模式
key = {…}:绑定的路由键(Routing Key),用于路由消息
/** * 短信接收者 * 监听短信队列,处理发送短信的逻辑 */@Component@Slf4jpublic class SmsReceiver { @RabbitListener(bindings = @QueueBinding( value = @Queue(value = MQConst.QUEUE_SMS_ITEM, durable = \"true\"), exchange = @Exchange(value = MQConst.EXCHANGE_TOPIC_SMS), key = {MQConst.ROUTING_SMS_ITEM} )) public void send(SmsDTO smsDTO) throws IOException { // 发送短信 log.info(\"SmsReceiver 消息监听:{} {}\", smsDTO.getMobile(), smsDTO.getMessage()); }}
- 发送消息的 Producer
/** * MQ服务类 * 用于发送消息到RabbitMQ */@Service@Slf4jpublic class MQService { @Resource private AmqpTemplate amqpTemplate; /** * 发送消息 * * @param exchange 交换机 * @param routingKey 路由 * @param message 消息 */ public boolean sendMessage(String exchange, String routingKey, Object message) { amqpTemplate.convertAndSend(exchange, routingKey, message); log.info(\"发送消息:[{}] [{}] [{}]\", exchange, routingKey, message); return true; }}
🚀 8. 测试类中测试发送
@SpringBootTestclass SpringbootRabbitmqDemoApplicationTests { @Resource private MQService mqService; @Test void RabbitMQTest() { // 创建一个测试的SMS DTO对象 SmsDTO smsDTO = new SmsDTO(); smsDTO.setMobile(\"17345666666\"); smsDTO.setMessage(\"Hello, this is a test message!\"); mqService.sendMessage(MQConst.EXCHANGE_TOPIC_SMS, MQConst.ROUTING_SMS_ITEM, smsDTO); }}
✅ 9.输出效果
发送消息
接收消息
总结
RabbitMQ 是构建可靠、高效、解耦系统的重要组件。掌握其基本使用,能大幅提升系统架构的灵活性与可维护性。