273 lines
8.4 KiB
Markdown
273 lines
8.4 KiB
Markdown
# RocketMQ 消息队列服务配置
|
||
|
||
ERP系统的RocketMQ消息队列集群配置,支持高可用、消息持久化和分布式事务。
|
||
|
||
## 架构概览
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ RocketMQ 集群 │
|
||
│ │
|
||
│ ┌─────────────┐ ┌─────────────┐ │
|
||
│ │ NameServer │ │ NameServer │ │
|
||
│ │ 9876 │◄────────────►│ 9877 │ │
|
||
│ └─────────────┘ └─────────────┘ │
|
||
│ ▲ │
|
||
│ │ │
|
||
│ ┌──────┴──────────────────────────────────────┐ │
|
||
│ │ │ │
|
||
│ │ ┌─────────────┐ ┌─────────────┐ │ │
|
||
│ │ │ Master-1 │◄──────►│ Slave-1 │ │ │
|
||
│ │ │ 10911 │ 同步 │ 10931 │ │ │
|
||
│ │ └─────────────┘ └─────────────┘ │ │
|
||
│ │ │ │
|
||
│ │ ┌─────────────┐ ┌─────────────┐ │ │
|
||
│ │ │ Master-2 │◄──────►│ Slave-2 │ │ │
|
||
│ │ │ 10921 │ 同步 │ 10941 │ │ │
|
||
│ │ └─────────────┘ └─────────────┘ │ │
|
||
│ └──────────────────────────────────────────────┘ │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
## 目录结构
|
||
|
||
```
|
||
rocketmq/
|
||
├── docker-compose.yml # Docker Compose配置
|
||
├── start.sh # 启动脚本
|
||
├── stop.sh # 停止脚本
|
||
├── status.sh # 状态检查脚本
|
||
├── README.md # 本文档
|
||
├── config/
|
||
│ ├── namesrv-1.conf # NameServer-1配置
|
||
│ ├── namesrv-2.conf # NameServer-2配置
|
||
│ ├── broker-master-1.conf # Broker Master-1配置
|
||
│ ├── broker-master-2.conf # Broker Master-2配置
|
||
│ ├── broker-slave-1.conf # Broker Slave-1配置
|
||
│ ├── broker-slave-2.conf # Broker Slave-2配置
|
||
│ ├── setup-topics.sh # Topic创建脚本
|
||
│ ├── rocketmq-base.yml # 基础配置(各服务通用)
|
||
│ ├── order-service.yml # 订单服务配置
|
||
│ ├── inventory-service.yml # 库存服务配置
|
||
│ └── finance-service.yml # 财务服务配置
|
||
├── producer/
|
||
│ ├── BaseRocketMQProducer.java # 生产者基类
|
||
│ ├── OrderMessageProducer.java # 订单消息生产者
|
||
│ ├── InventoryMessageProducer.java # 库存消息生产者
|
||
│ └── FinanceMessageProducer.java # 财务消息生产者
|
||
├── consumer/
|
||
│ ├── BaseRocketMQConsumer.java # 消费者基类
|
||
│ ├── OrderMessageConsumer.java # 订单消息消费者
|
||
│ ├── InventoryMessageConsumer.java # 库存消息消费者
|
||
│ └── FinanceMessageConsumer.java # 财务消息消费者
|
||
└── monitoring/
|
||
├── docker-compose-monitoring.yml # 监控配置
|
||
├── prometheus.yml # Prometheus配置
|
||
├── rocketmq_rules.yml # 告警规则
|
||
└── grafana-dashboard.json # Grafana看板
|
||
```
|
||
|
||
## 快速开始
|
||
|
||
### 1. 启动集群
|
||
|
||
```bash
|
||
cd /root/.openclaw/workspace/erp-java-backend/rocketmq
|
||
chmod +x start.sh stop.sh status.sh config/setup-topics.sh
|
||
./start.sh
|
||
```
|
||
|
||
### 2. 检查状态
|
||
|
||
```bash
|
||
./status.sh
|
||
```
|
||
|
||
### 3. 访问Dashboard
|
||
|
||
- RocketMQ Dashboard: http://localhost:8080
|
||
- Prometheus: http://localhost:9090
|
||
- Grafana: http://localhost:3000 (admin/admin123)
|
||
|
||
### 4. 停止集群
|
||
|
||
```bash
|
||
./stop.sh
|
||
```
|
||
|
||
## 消息主题
|
||
|
||
| 主题名称 | 用途 | 队列数 |
|
||
|---------|------|--------|
|
||
| order-topic | 订单消息 | 8 |
|
||
| inventory-topic | 库存消息 | 8 |
|
||
| finance-topic | 财务消息 | 8 |
|
||
| notification-topic | 通知消息 | 4 |
|
||
| payment-topic | 支付消息 | 8 |
|
||
| warehouse-topic | 仓库消息 | 4 |
|
||
| customer-topic | 客户消息 | 4 |
|
||
| report-topic | 报表消息 | 2 |
|
||
|
||
## 微服务配置
|
||
|
||
### 环境变量
|
||
|
||
```bash
|
||
export ROCKETMQ_NAMESRV_ADDR=localhost:9876;localhost:9877
|
||
```
|
||
|
||
### 订单服务 (ERP Order Service)
|
||
|
||
```yaml
|
||
rocketmq:
|
||
namesrv-addr: ${ROCKETMQ_NAMESRV_ADDR}
|
||
producer:
|
||
group: erp-order-producer-group
|
||
consumer:
|
||
group: erp-order-consumer-group
|
||
```
|
||
|
||
### 库存服务 (ERP Inventory Service)
|
||
|
||
```yaml
|
||
rocketmq:
|
||
namesrv-addr: ${ROCKETMQ_NAMESRV_ADDR}
|
||
producer:
|
||
group: erp-inventory-producer-group
|
||
consumer:
|
||
group: erp-inventory-consumer-group
|
||
```
|
||
|
||
### 财务服务 (ERP Finance Service)
|
||
|
||
```yaml
|
||
rocketmq:
|
||
namesrv-addr: ${ROCKETMQ_NAMESRV_ADDR}
|
||
producer:
|
||
group: erp-finance-producer-group
|
||
consumer:
|
||
group: erp-finance-consumer-group
|
||
```
|
||
|
||
## 消息格式
|
||
|
||
### 订单消息 (OrderMessage)
|
||
|
||
```json
|
||
{
|
||
"orderId": "ORD202604040001",
|
||
"customerId": "CUST001",
|
||
"totalAmount": 999.00,
|
||
"status": "PAID",
|
||
"paymentMethod": "WECHAT",
|
||
"timestamp": 1712208000000
|
||
}
|
||
```
|
||
|
||
### 库存消息 (InventoryMessage)
|
||
|
||
```json
|
||
{
|
||
"skuId": "SKU001",
|
||
"productName": "商品名称",
|
||
"quantity": 10,
|
||
"currentStock": 100,
|
||
"threshold": 20,
|
||
"warehouseId": "WH001",
|
||
"orderId": "ORD202604040001",
|
||
"operationType": "DEDUCT",
|
||
"timestamp": 1712208000000
|
||
}
|
||
```
|
||
|
||
### 财务消息 (FinanceMessage)
|
||
|
||
```json
|
||
{
|
||
"invoiceId": "INV202604040001",
|
||
"orderId": "ORD202604040001",
|
||
"amount": 999.00,
|
||
"customerId": "CUST001",
|
||
"customerName": "客户名称",
|
||
"taxNumber": "91310000XXXXXXXX",
|
||
"invoiceType": "VAT_SPECIAL",
|
||
"status": "CREATED",
|
||
"timestamp": 1712208000000
|
||
}
|
||
```
|
||
|
||
## 高可用配置
|
||
|
||
### 主从同步
|
||
|
||
- Master节点处理读写请求
|
||
- Slave节点实时同步Master数据
|
||
- 主节点故障时自动切换到从节点
|
||
|
||
### 消息持久化
|
||
|
||
- 消息存储在本地文件系统
|
||
- 异步刷盘策略(ASYNC_FLUSH)
|
||
- 消息保留时间:72小时
|
||
|
||
### 负载均衡
|
||
|
||
- 多个Consumer组成ConsumerGroup
|
||
- 消息在Group内负载均衡
|
||
- 支持顺序消息和事务消息
|
||
|
||
## 监控告警
|
||
|
||
### 监控指标
|
||
|
||
- TPS(每秒发送/消费消息数)
|
||
- 消费堆积量
|
||
- 发送失败率
|
||
- 内存/磁盘使用率
|
||
- NameServer/Broker存活状态
|
||
|
||
### 告警规则
|
||
|
||
| 告警名称 | 条件 | 严重级别 |
|
||
|---------|------|---------|
|
||
| NameServerDown | NameServer不可用 | Critical |
|
||
| BrokerDown | Broker不可用 | Critical |
|
||
| ConsumerLag | 消费堆积 > 1000 | Warning |
|
||
| ProducerSendFailed | 发送失败率 > 10/s | Warning |
|
||
| MemoryUsageHigh | 内存使用率 > 85% | Warning |
|
||
| DiskUsageHigh | 磁盘使用率 > 80% | Warning |
|
||
|
||
## 常见问题
|
||
|
||
### 1. 启动失败
|
||
|
||
检查Docker是否运行:
|
||
```bash
|
||
docker info
|
||
```
|
||
|
||
查看容器日志:
|
||
```bash
|
||
docker-compose logs -f
|
||
```
|
||
|
||
### 2. 消息发送失败
|
||
|
||
检查NameServer地址配置是否正确:
|
||
```bash
|
||
echo $ROCKETMQ_NAMESRV_ADDR
|
||
```
|
||
|
||
### 3. 消费堆积
|
||
|
||
查看消费者状态:
|
||
```bash
|
||
docker exec rocketmq-broker-master-1 sh mqadmin consumerStatus -n namesrv-1:9876 -g erp-order-consumer-group
|
||
```
|
||
|
||
## 技术支持
|
||
|
||
- RocketMQ官方文档: https://rocketmq.apache.org/docs/
|
||
- Dashboard使用指南: https://github.com/apache/rocketmq-dashboard
|