中心服务器 device-service MQTT 主题全量清单:静态 topic 18 + 谓词族 7(6 通道后缀 + 1 janus 入站正则)+ $SYS broker 系统事件 2 + 动态下行 5(发布点),共 32 个中心侧主题形状;另有「中心不消费的接入面」8 形(Web 直发 4 + 设备必订最小集 4)。核心契约常量共 84 个,其中内部 JMS destination 63 个不入本清单(平台内部 ActiveMQ 消息,与 MQTT 无关);消费者类维度的全量表见 MQTT 消费者。
源码归纳 @ 2026-09-14(日期基线)。payload 字段级内容一律为「源码归纳 @ 2026-09-14,无 schema 真源」——后端无 DTO / OpenAPI schema 真源,演进后须以源码为准重新核对。
本页为生成物,不可手改,重摸底刷新(重跑生成器整体覆盖)。
路由与口径(源码归纳):MQTT → JMS 唯一入口为 MqttConfig.mqttInputHandler(直通白名单 14 标签 + 谓词分支 9 条,未命中任何分支的 topic 一律丢弃并留痕);QoS 全局 2(入站 setQos(2) / 出站 setDefaultQos(2),无 per-topic QoS)。
| topic | 契约 | 方向 | 消费方 | 备注 |
|---|---|---|---|---|
server/center-server/iot/v1/forward/janus/admin/to |
IotV1ChannelContracts.FORWARD_JANUS_ADMIN_TO |
上行 · janus 转发 | IotV1ForwardJanusAdminToConsumer | 直通白名单;注入 admin_secret 后转发 janus admin 请求(源码归纳) |
server/center-server/iot/v1/forward/janus/to |
IotV1ChannelContracts.FORWARD_JANUS_TO |
上行 · janus 转发 | IotV1ForwardJanusToConsumer | 直通白名单;janus 请求原文透传到对应 Janus 服务器,回包按 transaction 路由(源码归纳,无 schema 真源) |
server/center-server/iot/v1/keep-alive-online-status |
IotV1ChannelContracts.KEEP_ALIVE_ONLINE_STATUS |
上行 · 保活 | IotV1KeepAliveOnlineStatusConsumer | 直通白名单;刷新客户端在线状态与最后在线时间(双写 Redis 缓存),无业务回包(源码归纳) |
server/center-server/iot/v1/list-category-info |
IotV1ChannelContracts.LIST_CATEGORY_INFO |
上行 · 请求响应 | IotV1ListCategoryInfoConsumer | 直通白名单;按 params.mqttClientIdPrefixes + params.categories 查询设备上报的分类信息(源码归纳,无 schema 真源) |
server/center-server/iot/v1/list-ice-server |
IotV1ChannelContracts.LIST_ICE_SERVER |
上行 · 请求响应 | IotV1ListIceServerConsumer | 直通白名单;按请求方设备编号返回 ICE 服务器配置(源码归纳,无 schema 真源) |
server/center-server/iot/v1/list-online-status |
IotV1ChannelContracts.LIST_ONLINE_STATUS |
上行 · 请求响应 | IotV1ListOnlineStatusConsumer | 直通白名单;按 params.mqttClientIdPrefixes 批量返回在线状态与最后在线时间(源码归纳,无 schema 真源) |
server/center-server/iot/v1/report-category-info |
IotV1ChannelContracts.REPORT_CATEGORY_INFO |
上行 · 遥测 | IotV1ReportCategoryInfoConsumer | 直通白名单(旧 telemetry destination 保守保留);与 telemetry 共用 TelemetryReportFunction,params 优先、data 兜底;无谓词族通配形状(源码归纳,无 schema 真源) |
server/center-server/iot/v1/retrieve |
IotV1ChannelContracts.RETRIEVE |
上行 · 请求响应 | IotV1RetrieveConsumer | 直通白名单;iot retrieve 谓词族同名汇入(web 前端直发);params.items 取值 ice / firmware / dms / ptt / upload/*(源码归纳,无 schema 真源) |
server/center-server/iot/v1/telemetry |
IotV1ChannelContracts.TELEMETRY |
上行 · 遥测 | IotV1TelemetryConsumer | 直通白名单;iot telemetry 谓词族同名汇入;载荷经 TelemetryReportFunction 入库,信封 sub 区分 status(默认)/ data(源码归纳,无 schema 真源) |
server/center-server/ptt/v1/forward/janus/admin/from/audiobridge/room |
PttV1ChannelContracts.FORWARD_JANUS_ADMIN_FROM_AUDIOBRIDGE_ROOM |
回环 | TalkGroupRoomResultListener | 直通白名单;内部回环,对接方无需对接(后端补偿链自发自收的房间结果归档点,非前端通道;设计性不收录 yaml 契约) |
server/center-server/ptt/v1/forward/janus/admin/to |
PttV1ChannelContracts.FORWARD_JANUS_ADMIN_TO |
上行 · janus 转发 | PttJanusForwardListener | 直通白名单;注入 admin_secret 后转发(源码归纳) |
server/center-server/ptt/v1/forward/janus/to |
PttV1ChannelContracts.FORWARD_JANUS_TO |
上行 · janus 转发 | PttJanusForwardListener | 直通白名单;janus 请求原文转发(源码归纳) |
server/center-server/ptt/v1/retrieve |
PttV1ChannelContracts.RETRIEVE |
上行 · 谓词族归档 | PttV1RetrieveConsumer | 非直通(不在 MqttConfig 白名单):常量值仅作 ptt retrieve 谓词族的归档 destination,直接发布该 topic 会被网关丢弃 |
server/center-server/ptt/v1/telemetry |
PttV1ChannelContracts.TELEMETRY |
上行 · 谓词族归档 | PttV1TelemetryConsumer | 非直通(不在 MqttConfig 白名单):常量值仅作 ptt telemetry 谓词族的归档 destination,直接发布该 topic 会被网关丢弃 |
server/center-server/webrtc/v1/forward/janus/admin/to |
WebrtcV1ChannelContracts.FORWARD_JANUS_ADMIN_TO |
上行 · janus 转发 | WebrtcV1ForwardJanusAdminToConsumer | 直通白名单;注入 admin_secret 后转发(源码归纳) |
server/center-server/webrtc/v1/forward/janus/to |
WebrtcV1ChannelContracts.FORWARD_JANUS_TO |
上行 · janus 转发 | WebrtcV1ForwardJanusToConsumer | 直通白名单;janus 请求原文转发(源码归纳) |
server/center-server/webrtc/v1/retrieve |
WebrtcV1ChannelContracts.RETRIEVE |
上行 · 谓词族归档 | WebrtcV1RetrieveConsumer | 非直通(不在 MqttConfig 白名单):常量值仅作 webrtc retrieve 谓词族的归档 destination,直接发布该 topic 会被网关丢弃 |
server/center-server/webrtc/v1/telemetry |
WebrtcV1ChannelContracts.TELEMETRY |
上行 · 谓词族归档 | WebrtcV1TelemetryConsumer | 非直通(不在 MqttConfig 白名单):常量值仅作 webrtc telemetry 谓词族的归档 destination,直接发布该 topic 会被网关丢弃 |
| topic | 契约 | 方向 | 消费方 | 备注 |
|---|---|---|---|---|
{identity}/{id}/iot/telemetry/v1 |
IotV1ChannelContracts.isTelemetrySourceTopic(后缀 /iot/telemetry/v1 → IotV1ChannelContracts.TELEMETRY) |
上行 · 遥测 | IotV1TelemetryConsumer | identity ∈ device / server / user;匹配该形状的遥测上报按 iot 通道处理,与静态 telemetry 主题同名汇入 |
{identity}/{id}/iot/retrieve/v1 |
IotV1ChannelContracts.isRetrieveSourceTopic(后缀 /iot/retrieve/v1 → IotV1ChannelContracts.RETRIEVE) |
上行 · 请求响应 | IotV1RetrieveConsumer | identity ∈ device / server / user;匹配该形状的检索请求按 iot 通道处理;v1 位于中段的形状(如 device/+/+/v1/retrieve)不被接受 |
{identity}/{id}/webrtc/telemetry/v1 |
WebrtcV1ChannelContracts.isTelemetrySourceTopic(后缀 /webrtc/telemetry/v1 → WebrtcV1ChannelContracts.TELEMETRY) |
上行 · 遥测 | WebrtcV1TelemetryConsumer | identity ∈ device / server / user;匹配该形状的遥测上报按 webrtc 通道处理(常量串主题不可直发,见静态表) |
{identity}/{id}/webrtc/retrieve/v1 |
WebrtcV1ChannelContracts.isRetrieveSourceTopic(后缀 /webrtc/retrieve/v1 → WebrtcV1ChannelContracts.RETRIEVE) |
上行 · 请求响应 | WebrtcV1RetrieveConsumer | identity ∈ device / server / user;匹配该形状的检索请求按 webrtc 通道处理(常量串主题不可直发,见静态表) |
{identity}/{id}/ptt/telemetry/v1 |
PttV1ChannelContracts.isTelemetrySourceTopic(后缀 /ptt/telemetry/v1 → PttV1ChannelContracts.TELEMETRY) |
上行 · 遥测 | PttV1TelemetryConsumer | identity ∈ device / server / user;匹配该形状的遥测上报按 ptt 通道处理(常量串主题不可直发,见静态表) |
{identity}/{id}/ptt/retrieve/v1 |
PttV1ChannelContracts.isRetrieveSourceTopic(后缀 /ptt/retrieve/v1 → PttV1ChannelContracts.RETRIEVE) |
上行 · 请求响应 | PttV1RetrieveConsumer | identity ∈ device / server / user;匹配该形状的检索请求按 ptt 通道处理(常量串主题不可直发,见静态表) |
server/{janusNo}/from、server/{janusNo}/admin/from |
JanusChannelContracts.isInboundSourceTopic(正则 ^server/(janus-[0-9]{1,3})/(?:(admin)/)?from$ → JanusChannelContracts.INBOUND) |
上行 · janus 物理入站 | JanusInboundRouter | janusNo = janus-1…999;Janus 服务器物理入站回包面(发布方为 Janus 服务器,对接方通常不发布此类 topic);中心有此类处理 |
| topic | 契约 | 方向 | 消费方 | 备注 |
|---|---|---|---|---|
| `$SYS/brokers/+/clients/+/connected | disconnected` | SysBrokersClientChannelContracts.isLifecycleSourceTopic(正则 `^\$SYS/brokers/.+/clients/.+/(?:connected |
disconnected)$ → SysBrokersClientChannelContracts.LIFECYCLE`) |
上行 · broker 事件 |
| `$SYS/brokers/+/clients/+/subscribed | unsubscribed` | SysBrokersClientChannelContracts.isActivitySourceTopic(正则 `^\$SYS/brokers/.+/clients/.+/(?:subscribed |
unsubscribed)$ → SysBrokersClientChannelContracts.ACTIVITY`) |
上行 · broker 事件 |
| topic | 契约 | 方向 | 消费方 | 备注 |
|---|---|---|---|---|
{reply}(请求信封 reply 字段,客户端指定) |
IotV1Consumer.processReply(mqttGateway.send) | 下行 · 请求响应 | IotV1Consumer(发布方) | iot v1 家族统一回包出口;reply 等于来源 topic 时丢弃(MqttReplyTopicGuard 防回环);响应键 id / status / replyNumber / data |
server/{janusNo}/to、server/{janusNo}/admin/to |
JanusTopics.physicalTo / physicalAdminTo(String.format) | 下行 · janus 请求 | JanusPhysicalPublisher(发布方) | janus 请求原文下行到物理 Janus 服务器(admin 通道带 admin_secret 注入由转发消费者完成)(源码归纳) |
{janus transaction 携带的 replyTopic} |
JanusInboundRouter(mqttGateway.send ×2) | 下行 · janus 响应 | JanusInboundRouter(发布方) | janus 回包 topic 取自请求 transaction 前缀,或 session 路由缓存(transactionless admin 回包)(源码归纳) |
device/{deviceNo}/iot/deliver/v1 |
DataAcquisitionServerIpSyncConsumer(String.format) | 下行 · DMS 载荷 | DataAcquisitionServerIpSyncConsumer(发布方) | 采集服务器 IP 同步后向关联采集设备推送 DMS 载荷(源码归纳,无 schema 真源) |
user/{username}/app/ponycam/message |
NotifyToRefreshTheDeviceListConsumer(String.format) | 下行 · App 推送 | NotifyToRefreshTheDeviceListConsumer(发布方) | 设备变更后向相关用户 App 推送设备列表刷新通知(源码归纳,无 schema 真源) |
下列 topic 中心后端不消费、不发布(服务端订阅面不含 device/+/+/configs/#、device/+/webrtc/#),发布方为 Web 前端 / WebRTC 对接方,消费方为设备固件——中心非契约方,故不提供 yaml 契约。依据 Web 端实现归纳(2026-09)。
Web 直发 4 形(Web 前端直接发布,方向 Web → 设备):
| topic 形状 | 用途(依据 Web 端实现归纳,2026-09) |
|---|---|
device/{no}/ptt/deliver/v1 |
PTT 对讲指令投递(Web 发起 join / kick 等对讲操作) |
device/{no}/webrtc/deliver/v1 |
ICE 服务器配置下发(Web 直发) |
device/{no}/iot/configs/v1 |
设备配置下发(Web 设置类路由直发) |
device/{no}/webrtc/v1 |
WebRTC 直播 / 点对点信令(Web 直发) |
设备必订最小集(中心侧可证部分;设备还应订阅其请求信封 reply 字段指定的回包 topic——该 topic 由设备自定义):
| topic | 发布方 | 用途 |
|---|---|---|
device/{no}/iot/deliver/v1 |
中心(应答 + DMS 推送) | 请求应答回包与 DMS 载荷推送的落地 topic |
device/{no}/ptt/deliver/v1 |
中心(PTT 配置投递)+ Web 直发 | PTT 配置异步重投 + Web 发起的 join / kick 对讲操作 |
device/{no}/webrtc/janus-from |
中心(janus 回包路由) | janus 旧设备形请求的回包落点(按 transaction 路由回发) |
device/{no}/webrtc/deliver/v1 |
Web 直发 | ICE 服务器配置下发 |
直发资格:某 topic 能否直接发布以 broker ACL 为准——上表 Web 直发 4 形即「ACL 允许发布」的事实样例;topic 若命中中心白名单 / 谓词族则会被中心消费(见前表),否则仅设备侧可见。
固件侧权威缺证:设备固件必须订阅的完整全集权威在设备固件仓——device/{no}/iot/configs/v1、device/{no}/webrtc/v1 等直连族是否必订由设备固件决定,中心侧无源码权威,本表仅为中心侧可证的最小集。
device-service 以 Paho v5 订阅下列 topic(es-center-server.mqtt.topics,application-default-es-center-server.yaml);到达后能否路由到消费者以上述谓词 / 白名单为准:
$SYS/brokers/#server/center-server/#server/+/fromserver/+/admin/fromdevice/+/+/telemetry/#device/+/+/retrieve/#server/+/+/telemetry/#server/+/+/retrieve/#