erp-java/rocketmq/README.md

273 lines
8.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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