134 lines
3.1 KiB
Markdown
134 lines
3.1 KiB
Markdown
|
|
# RabbitMQ通用模块
|
|||
|
|
|
|||
|
|
## 简介
|
|||
|
|
|
|||
|
|
本模块提供了RabbitMQ的通用封装,包括消息发送、接收、重试、死信队列等功能。
|
|||
|
|
|
|||
|
|
## 功能特性
|
|||
|
|
|
|||
|
|
- 消息发送(普通消息、延迟消息)
|
|||
|
|
- 消息接收和消费
|
|||
|
|
- 消息重试机制
|
|||
|
|
- 死信队列处理
|
|||
|
|
- 消息确认机制
|
|||
|
|
- JSON消息转换
|
|||
|
|
- 完整的异常处理
|
|||
|
|
|
|||
|
|
## 使用方法
|
|||
|
|
|
|||
|
|
### 1. 添加依赖
|
|||
|
|
|
|||
|
|
在需要使用RabbitMQ的模块中添加依赖:
|
|||
|
|
|
|||
|
|
```xml
|
|||
|
|
<dependency>
|
|||
|
|
<groupId>org.dromara</groupId>
|
|||
|
|
<artifactId>ruoyi-common-rabbitmq</artifactId>
|
|||
|
|
</dependency>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 配置文件
|
|||
|
|
|
|||
|
|
在application.yml中添加RabbitMQ配置:
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
spring:
|
|||
|
|
rabbitmq:
|
|||
|
|
host: localhost
|
|||
|
|
port: 5672
|
|||
|
|
username: guest
|
|||
|
|
password: guest
|
|||
|
|
virtual-host: /
|
|||
|
|
connection-timeout: 15000
|
|||
|
|
publisher-confirm-type: correlated
|
|||
|
|
publisher-returns: true
|
|||
|
|
listener:
|
|||
|
|
simple:
|
|||
|
|
acknowledge-mode: manual
|
|||
|
|
retry:
|
|||
|
|
enabled: true
|
|||
|
|
max-attempts: 3
|
|||
|
|
initial-interval: 1000
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 发送消息
|
|||
|
|
|
|||
|
|
```java
|
|||
|
|
@Autowired
|
|||
|
|
private RabbitMQService rabbitMQService;
|
|||
|
|
|
|||
|
|
// 发送普通消息
|
|||
|
|
String messageId = rabbitMQService.sendMessage("Hello RabbitMQ!");
|
|||
|
|
|
|||
|
|
// 发送到指定交换机和路由键
|
|||
|
|
String messageId = rabbitMQService.sendMessage("exchange.name", "routing.key", "消息内容");
|
|||
|
|
|
|||
|
|
// 发送延迟消息
|
|||
|
|
String messageId = rabbitMQService.sendDelayMessage("exchange.name", "routing.key", "延迟消息", 5000);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4. 接收消息
|
|||
|
|
|
|||
|
|
```java
|
|||
|
|
@Component
|
|||
|
|
public class MyConsumer {
|
|||
|
|
|
|||
|
|
@RabbitListener(queues = "your.queue.name")
|
|||
|
|
public void handleMessage(String message) {
|
|||
|
|
// 处理消息
|
|||
|
|
System.out.println("接收到消息: " + message);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 核心类说明
|
|||
|
|
|
|||
|
|
### RabbitMQService
|
|||
|
|
|
|||
|
|
主要的服务类,提供以下方法:
|
|||
|
|
|
|||
|
|
- `sendMessage(String content)` - 发送消息到默认队列
|
|||
|
|
- `sendMessage(String exchange, String routingKey, String content)` - 发送消息到指定交换机和路由键
|
|||
|
|
- `sendDelayMessage(String exchange, String routingKey, String content, long delayTime)` - 发送延迟消息
|
|||
|
|
- `retryMessage(RabbitMQMessage message)` - 重试消息
|
|||
|
|
- `sendToDeadLetter(String content, RabbitMQMessage originalMessage)` - 发送到死信队列
|
|||
|
|
|
|||
|
|
### RabbitMQMessage
|
|||
|
|
|
|||
|
|
消息实体类,包含以下字段:
|
|||
|
|
|
|||
|
|
- `messageId` - 消息ID
|
|||
|
|
- `content` - 消息内容
|
|||
|
|
- `messageType` - 消息类型
|
|||
|
|
- `exchange` - 交换机名称
|
|||
|
|
- `routingKey` - 路由键
|
|||
|
|
- `queueName` - 队列名称
|
|||
|
|
- `createTime` - 创建时间
|
|||
|
|
- `expireTime` - 过期时间
|
|||
|
|
- `retryCount` - 重试次数
|
|||
|
|
- `maxRetryCount` - 最大重试次数
|
|||
|
|
- `status` - 消息状态
|
|||
|
|
- `businessData` - 业务数据
|
|||
|
|
|
|||
|
|
### RabbitMQConstants
|
|||
|
|
|
|||
|
|
常量类,定义了默认的交换机、队列、路由键等配置。
|
|||
|
|
|
|||
|
|
## 注意事项
|
|||
|
|
|
|||
|
|
1. 确保RabbitMQ服务已启动
|
|||
|
|
2. 根据实际需求调整队列和交换机的配置
|
|||
|
|
3. 合理设置消息的TTL和重试次数
|
|||
|
|
4. 处理死信消息,避免消息丢失
|
|||
|
|
5. 在生产环境中建议开启消息持久化
|
|||
|
|
|
|||
|
|
## 扩展
|
|||
|
|
|
|||
|
|
可以根据业务需求扩展以下功能:
|
|||
|
|
|
|||
|
|
- 消息优先级
|
|||
|
|
- 消息路由规则
|
|||
|
|
- 消息过滤
|
|||
|
|
- 消息监控和统计
|
|||
|
|
- 集群支持
|