messaging.md
2.92 KB
消息(ActiveMQ / RocketMQ)
xly 中不是所有集成都适合同步 HTTP 调用。框架运行两个消息代理,它们职责不同:
| Broker | 用途 | Producer | Consumer |
|---|---|---|---|
| ActiveMQ / JMS | 缓存失效、集群内扇出事件。元数据变更链路(缓存失效)依赖它。 | xlyErpJmsProductor |
xlyErpJmsConsumer |
| RocketMQ | 其他不适合 ActiveMQ 假设的集成流程。 |
RocketMQServiceImpl(位于 xlyBusinessService) |
因服务而异。 |
本页只是指针而不是深入说明;准确的队列名和载荷在 xlyErpJmsConsumer/src/main/java/com/xly/xlyerpjmsconsumer/ 下按 consumer thread 级别记录。
ActiveMQ / JMS:缓存失效通道
Producer 侧队列声明位于 xlyErpJmsProductor/src/main/java/com/xly/xlyerpjmsproductor/config/P2pQueue.java。当前框架使用的主要 destination(完整列表请读该文件):
| Constant | 用途 |
|---|---|
ERP_JMS_ACTIVEMQ_CHANGE_GDS_MODULE |
“模块元数据已变更”,触发 ConsumerChangeGdsModuleThread 清理各节点相关 Redis 缓存。见元数据变更后的缓存失效。 |
ERP_JMS_ACTIVEMQ_CHANGE_ELE_CUSTOMER |
客户主数据变更扇出。 |
ERP_JMS_ACTIVEMQ_CHANGE_ELE_EMPLOYEE |
员工主数据变更扇出。 |
ERP_JMS_ACTIVEMQ_CHANGE_ELE_MACHINE |
车间机台主数据变更扇出。 |
ERP_JMS_ACTIVEMQ_UPD_SALE_ORDER、ERP_JMS_ACTIVEMQ_UPD_WORK_ORDER、ERP_JMS_ACTIVEMQ_UPD_PRODUCTION_REPORT
|
“单据已更新”通知,由后台 worker 消费(合计重算、下游失效等)。 |
ERP_JMS_ACTIVEMQ_DEL_SALE_ORDER、ERP_JMS_ACTIVEMQ_DEL_WORK_ORDER、ERP_JMS_ACTIVEMQ_DEL_PRODUCTION_REPORT
|
单据删除通知。 |
每个 destination 在 xlyErpJmsConsumer/.../thread/ 下都有对应的 Consumer*Thread 类异步处理消息。
RocketMQ:其他流程
RocketMQServiceImpl 及其配套 RocketMQService 接口位于 xlyBusinessService/src/main/java/com/xly/service/。它们覆盖非缓存失效流程(例如 MQCompensateServiceImpl 处理 ActiveMQ destination 难以表达的补偿 / 重试语义)。RocketMQ topic 按环境配置。
手动触发缓存失效
如果元数据变更是通过原始 SQL 完成的(没有 JMS 事件),各节点缓存不会自动清理。支持的覆盖路径是 xlyBusinessService/.../service/impl/ 中的 BusinessCleanRedisDataImpl,它可以直接发布失效事件。更完整的排查路径见元数据变更后的缓存失效。
这个机制不是什么
- 不是公开集成通道。 外部集成方不应向这些 broker 发布消息,也不应订阅它们。它们是集群内部的扇出机制。
-
不是失效缓存的唯一方式。
xlyEntry的 HTTP 写路径已经会在需要时发布 JMS 事件;手动触发只用于边界情况。