验证 MQTT 消息投递与定时发布
为接收端创建订阅,发布 MQTT 5 JSON,在 Trace 中验证消息与属性,再运行并停止一个有边界的定时消息。
- 作者:
- Mqttable
- 更新:
本页目录7 个章节
加载中...
为接收端创建订阅,发布 MQTT 5 JSON,在 Trace 中验证消息与属性,再运行并停止一个有边界的定时消息。
加载中...
本教程在一个专用测试工作区中证明两个结果:一条 MQTT 5 JSON 携带属性到达独立 subscriber;一个每五秒发送一次的定时消息在删除后不再继续。未安装 Mqttable 的读者可以通过截图理解完整流程,但实际执行需要 Mqttable,以及你拥有或获授权测试的 Broker。Mqttable 不内置 MQTT Broker。
进入连接,选择专用工作区 Docs Message Demo。截图使用以下准确值:
Docs Message Demomqtt://127.0.0.1:2883publisher,Client ID mqttable-docs-publisher-01subscriber,Client ID mqttable-docs-subscriber-01mqttable/docs/message-flow名称、Client ID、Topic、Payload 和属性值均由本教程提供并由用户填写;Mqttable 不会自动生成这些教程值。尚未安装 Mqttable 时,先完成 MQTT 快速入门。需要创建两个 MQTT 5 客户端时,使用 Broker 与连接参数 中的步骤,并连接到等价的获授权测试端点。两个客户端都显示已连接后再继续。

专用工作区从两个独立 MQTT 5 会话开始,尚未创建教程订阅或定时消息。
这个工作区可以整体清理。只有专门创建的教程工作区才能在后文清空 Trace 或删除 Broker;不要对共享测试 Broker 或生产配置执行这些操作。
在 subscriber 行选择添加订阅,填写:
subscribermqttable/docs/message-flow7QoS、RH 0、No Local 和 Retain as Published 都是投递控制项。表单默认使用 QoS 0;本教程主动改成 QoS 1,以便 Broker 返回确认报文。标识符 7 是教程给出的固定测试值,不是 Mqttable 随机生成的值。

确认前,先把接收端和 MQTT 5 订阅控制项配置为明确值。
选择确认。若 subscriber 行没有显示 Topic、QoS1 与 ID:7,或者 Trace 没有成功 SUBACK,请停止,不要继续发布。

订阅标签和 SUBACK 证明 Broker 接受了请求;此时还没有业务消息到达。
Docs Message Demo 只服务于本教程,因此可以选择清空消息,确认对话框中的工作区名称,再继续。这样可以从空 Trace 开始,而不会删除其他任务的证据。
在发送栏中选择 publisher,填写:
mqttable/docs/message-flow{
"sensor": "temp-01",
"value": 23.4,
"unit": "C",
"mode": "direct"
}

Trace 仍为零条时,准备一条可以明确识别的 JSON 消息。
打开 MQTT 5 属性,设置:
application/json30 秒0然后添加一条用户属性:键 source,值 docs-message-guide。

教程使用三项 MQTT 5 属性和一条非敏感用户属性,收到消息后可以再次核对。
消息过期时间限制 Broker 保留未投递测试消息的时长,但不能代替应用侧的过期校验。不要把密码、Token、个人信息或客户标识放进 Payload 或用户属性。
选择一次发送,然后最小化发送栏。按下发送不是成功终点。
Trace 应显示四条相关的 QoS 1 报文:
publisher:PUBLISH → 发送publisher:PUBACK ← 接收subscriber:PUBLISH ← 接收subscriber:PUBACK → 发送
两个独立 Client ID、相同 Topic 与 Payload,以及两个 PUBACK 方向共同证明 QoS 1 完整链路。
打开 subscriber / PUBLISH / 接收。在消息详情中核对 Topic、JSON、QoS、Retain、消息属性、订阅标识符和用户属性。

消息详情是第二层证据:它验证 subscriber 实际收到的内容,而不仅是 publisher 请求发送的内容。
只有 publisher PUBACK、没有 subscriber PUBLISH 时,只能证明 Broker 接受了发布。先检查 Topic Filter、subscriber 状态、No Local 与 Broker ACL,不要继续创建定时任务。
在 publisher 行选择添加消息,填写:
mqttable/docs/message-flow5 秒application/json30 秒source=docs-message-guide{
"sensor": "temp-01",
"value": 23.4,
"unit": "C",
"mode": "scheduled"
}

该任务每五秒重复一次已校验的 JSON 发布;表单没有消息数量或结束时间字段。
选择创建定时消息。第一次发送发生在完整的五秒间隔之后。Trace 客户端筛选选择 subscriber,Topic Filter 填写 mqttable/docs/message-flow,Payload Filter 填写 scheduled。至少出现三条收到的 PUBLISH 后,记录当前筛选结果数量。

三条间隔五秒的 PUBLISH / 接收证明定时任务正在 publisher 上运行,并成功到达 subscriber。
不能用断开客户端代替清理。定时消息会随 Connection 持久保存,并可能在重连后恢复。选择删除定时消息,在确认框中核对准确的 Broker、Client ID 与 Topic。

确认框列出准确的定时消息对象,再删除持久配置。
选择确认,记录确认后的筛选数量,再等待六秒——一个完整间隔再加一秒。结果数量不得继续增加,publisher 行也应从定时消息标签恢复为添加消息。

经过一个完整间隔仍没有新报文;任务标签消失且 Trace 数量稳定,证明重复发布已经停止。
本教程创建了以下准确资源:
Docs Message Demomqttable-docs-publisher-01 与 mqttable-docs-subscriber-01subscriber 上的 mqttable/docs/message-flowpublisher 上的 mqttable/docs/message-flow——已经删除Docs Message Demo 的本地证据打开 Docs Message Demo Broker 设置并选择删除。包含其他测试的工作区不能执行这一步。

确认定时任务已经停止后,再删除专用教程工作区。
选择删除。页面不再显示 Docs Message Demo 和两个教程 Client ID 时,清理完成。

专用 Broker、Clients、Subscription、Scheduled Message 和 Trace 均已清除。
connections:write / messages:publish 权限。遇到 Locked 或权限错误时停止,不能编造 Local fallback。