# zmqp — ActiveMQ 消息生产者 ## 概述 zmqp 是 EIS 系统中的 **ActiveMQ 消息发布服务**。它作为 ICE→ActiveMQ 的桥接器,其他进程通过 ICE 调用 `SendDataShort`,zmqp 将消息发布到 ActiveMQ Topic,供外部系统消费。 ## 进程架构 zmqp 是 PACE 平台组件,注册 ICE 端点 `"baosight/zmqp"`。 ``` eqpalg / zad / ztrk │ │ ICE SendDataShort(eventNo, data) ▼ ┌──────────────────────────┐ │ zmqp │ │ │ │ ZmqpICEI::SendDataShort │ │ │ │ │ ├→ eventNo=911 ────→ ActiveMQ Topic: {UnitNo}_EIS_RuleTopic │ ├→ eventNo=912 ────→ ActiveMQ Topic: {UnitNo}_EMS_TaskTopic │ ├→ eventNo=601 ────→ ActiveMQ Topic: {UnitNo}_ems_eqpalg │ ├→ eventNo=602 ────→ ActiveMQ Topic: {UnitNo}_ems_eqpstats │ ├→ eventNo=101 ────→ ActiveMQ Topic: {UnitNo}_backToStaParams │ └→ ...其他事件号 → 对应 Topic │ │ └──────────────────────────┘ ``` ## ICE 接口 | 方法 | 说明 | |------|------| | `SendDataShort(eventNo, seq)` | 核心接口,根据 eventNo 将消息发布到对应的 ActiveMQ Topic | | `SendDataLong` | 未实现 | | `TimeNotify` | 调试用,向 `RuleTopic` 发送测试消息 | ## 事件号与 Topic 映射 | eventNo | 常量 | Topic 后缀 | 用途 | |---------|------|-----------|------| | 911 | `EV_MQP_EQPALGMON` | `_EIS_RuleTopic` | eqpalg-mon 报警信息 | | 912 | `EV_MQP_EQPALGTASK` | `_EMS_TaskTopic` | eqpalg-task 计算结果 | | 601 | `EV_MQP_EQPALG` | `_ems_eqpalg` | 设备算法消息 | | 602 | `EV_MQP_EQPSTATS` | `_ems_eqpstats` | 设备统计信息 | | — | `EV_MQP_ZONETRK` | `_zonetrk` | 区域跟踪 | | — | `EV_MQP_TAGMSG` | `_tagmsg` | 标签消息 | | — | `EV_MQP_ITEMTAG` | `_itemtag` | 测点标签 | | — | `EV_MQP_PDILIST` | `_pdilist` | PDI 列表 | | — | `EV_MQP_PDOLIST` | `_pdolist` | PDO 列表 | | — | `EV_MQP_RULEMSG` | `_RuleTopic` | 规则消息 | | 101 | — | `_backToStaParams` | 统计参数回传 | 所有 Topic 名称格式: `{UnitNo}_{suffix}`(如 `C308_EIS_RuleTopic`)。 ## ActiveMQ 连接 - **库**: Apache ActiveMQ-CPP 3.9.3 - **配置**: 从 `CRGS` 配置文件读取 `[activemq]` 段的 `server` 属性 - **模式**: 默认使用 Topic(`istopic=true`),非持久化投递 ## 典型数据流 ``` eqpalg 检测到报警 │ ▼ alarm_poster → ICE SendDataShort(911, alarm_json) │ ▼ zmqp → ProducerMQ::Publish("{UnitNo}_EIS_RuleTopic", alarm_json) │ ▼ ActiveMQ Broker → 外部系统(Web UI / 第三方告警平台) ``` ## 源文件 ``` src/zmqp/ ├── zmqp.cpp # PACE 组件入口 ├── ZmqpICEI.cpp # ICE servant: 事件号→Topic 路由 └── ProducerMQ.cpp # ActiveMQ 生产者封装 ```