# 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