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_ORDERERP_JMS_ACTIVEMQ_UPD_WORK_ORDERERP_JMS_ACTIVEMQ_UPD_PRODUCTION_REPORT “单据已更新”通知,由后台 worker 消费(合计重算、下游失效等)。
ERP_JMS_ACTIVEMQ_DEL_SALE_ORDERERP_JMS_ACTIVEMQ_DEL_WORK_ORDERERP_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 事件;手动触发只用于边界情况。