# zmqc — ActiveMQ 消息消费者 ## 概述 zmqc 是 EIS 系统中的 **ActiveMQ 消息消费服务**。它作为 ActiveMQ→ICE 的桥接器,监听 ActiveMQ 队列,将收到的消息通过 ICE 转发给对应的内部服务。 ## 进程架构 zmqc 是 PACE 平台组件,注册 ICE 端点 `"baosight/zmqc"`。 ``` ActiveMQ Broker │ │ Queue: /queue/{UnitNo}_invokeModel │ Queue: /queue/{UnitNo}_eqpalg │ Queue: /queue/{UnitNo}_repair ▼ ┌──────────────────────────┐ │ zmqc │ │ │ │ 启动 3 个 ConsumerMQ 线程 │ │ │ │ tHDL4: invokeModel 队列 │──→ ICE SendDataShort(99999) → baosight/eqpalg-task │ tHDL2: eqpalg 队列 │──→ ICE SendDataShort(99999) → baosight/eqpalg-mon │ tHDL1: repair 队列 │──→ ICE SendDataShort(99999) → baosight/eqpm │ │ └──────────────────────────┘ ``` ## 三个监听线程 | 线程 | ActiveMQ 目标 | ICE 代理目标 | 用途 | |------|-------------|-------------|------| | tHDL4 | `/queue/{UnitNo}_invokeModel` | `baosight/eqpalg-task` | 外部触发算法单次执行 | | tHDL2 | `/queue/{UnitNo}_eqpalg` | `baosight/eqpalg-mon` | 外部发送规则 CRUD 指令 | | tHDL1 | `/queue/{UnitNo}_repair` | `baosight/eqpm` | 外部触发设备点检更新 | ## ICE 接口 | 方法 | 说明 | |------|------| | `SendDataShort` | 空操作(zmqc 不做 ICE 服务端处理) | | `SendDataLong` | 未实现 | | `TimeNotify` | 未实现 | zmqc 的核心逻辑在 **ICE 客户端角色** — 它通过 `ConsumerMQ` 线程从 ActiveMQ 接收消息,然后调用其他 ICE 服务的 `SendDataShort` 转发。 ## ActiveMQ 连接 - **库**: Apache ActiveMQ-CPP 3.9.3 - **配置**: 从 `CRGS` 配置文件读取 `[activemq]` 段的 `server` 属性 - **模式**: 使用 Queue(点对点模式) ## 典型数据流 ``` 外部系统(Web UI 触发单次执行) │ ▼ ActiveMQ Queue: /queue/C308_invokeModel │ ▼ zmqc ConsumerMQ 线程 → ICE SendDataShort(99999, json) │ ▼ eqpalg-task → AlgorithmManager::dispose() → exec_task() ``` ## MQ 桥接总结 ``` 外部系统 ──ActiveMQ──→ zmqc ──ICE──→ 内部服务 (eqpalg/eqpm) 内部服务 ──ICE──→ zmqp ──ActiveMQ──→ 外部系统 ``` zmqc + zmqp 共同构成了 **ICE ↔ ActiveMQ 双向桥接**。 ## 源文件 ``` src/zmqc/ ├── zmqc.cpp # PACE 组件入口 ├── ZmqcICEI.cpp # ICE servant + 启动3个消费线程 └── ConsumerMQ.cpp # ActiveMQ 消费者线程(Topic/Queue 两种模式) ```