首页/新闻资讯/正文详情

Eclipse Mosquitto MQTT 5 支持进度与实战:从开发分支到 `-D` 属性命令行

发布时间:2026/9/26 15:57:10 来源:云帆数科 栏目:资讯中心
Eclipse Mosquitto MQTT 5 支持进度与实战:从开发分支到 `-D` 属性命令行
物联网消息队列后端网络/通信【免费下载链接】mosquittoEclipse Mosquitto - An open source MQTT broker项目地址https://gitcode.com/gh_mirrors/mo/mosquitto点击查看免费下载MQTT 5MQTT v5.0为物联网消息协议带来了属性Properties、请求/响应、消息过期、主题别名等全新能力。本文基于 Mosquitto 官方博客文章 mqtt5-progress梳理 MQTT 5 支持在 Mosquitto 中的落地进度并结合当前仓库源码给出mosquitto_pub/mosquitto_sub使用-D选项设置属性的完整命令与参数清单帮助读者立刻上手测试 MQTT 5 特性。读完本文你将掌握如何获取并编译 MQTT 5 支持分支、当前已实现的功能边界、-D command identifier value的完整语法与每个命令允许的属性白名单以及请求/响应、会话过期、主题别名等特性在源码与测试中的真实实现位置。MQTT 5 支持现状开发中的里程碑据 mqtt5-progress.md发布于 2018-11-29所述Mosquitto 对 MQTT 5 的支持开发进行中且进展良好Development of support for MQTT 5 is ongoing and making good progress但一度因其他非 Mosquitto 工作的优先级而显著延期。这是 Mosquitto 迈向 2.0 版本前的关键过渡阶段文档明确指出紧随 1.6 之后的 2.0 版本计划对 libmosquitto API 进行破坏性整合consolidate the libmosquitto API with breaking changes这是因为客户端库为同时提供 MQTT 5 新特性与向后兼容不得不增加大量新函数API 空间已趋于膨胀需要在 2.0 中收拢重构。从当前仓库已演进至更成熟状态回头看这份进度报告描述的功能点如今大多已在主干中稳定落地例如协议常量定义于 include/mosquitto/mqtt_protocol.hPROTOCOL_VERSION_v311 4、PROTOCOL_VERSION_v5 5属性枚举与属性库实现见 include/mosquitto/libcommon_properties.h 与 lib/property_mosq.c。当时已实现的特性清单原文档列出的当前特性包括所有入站/出站数据包的支持CONNECT/CONNACK、PUBLISH、PUBACK、PUBREC、PUBREL、PUBCOMP、SUBSCRIBE、SUBACK、UNSUBSCRIBE、UNSUBACK、PINGREQ/PINGRESP、DISCONNECT、AUTH 等报文均能收发但并非所有字段都被完整处理所有属性的收发属性Properties可以发送和接收但并非全部属性都会被处理客户端设置属性libmosquitto 提供mosquitto_property_add_*系列 API 与mosquitto_publish_v5、mosquitto_subscribe_v5等 v5 接口请求/响应支持支持携带response-topic发起请求但当时客户端尚不能处理收到的correlation-data当前仓库中已有03-request-response-correlation-1.c等测试见下文Retain 可用性retain-available属性的支持消息过期间隔支持message-expiry-interval服务端分配客户端标识符即assigned-client-identifier负载格式指示符支持payload-format-indicator内容类型支持content-type从客户端到 broker 的基础主题别名支持topic-alias大量新增测试。测试 MQTT 5使用 mqtt5 分支原文档建议通过仓库的mqtt5分支来测试当时的 MQTT 5 支持状态并强调这仍然是非常进行中的工作部分功能不完整接口可能还会变化very much a work in progress, so parts are incomplete and interfaces may yet change。这提醒开发者在特性开发期使用实验分支时应关注接口变更风险当前仓库主干已经把这些能力收敛为稳定的 v5 API直接基于主干构建即可使用。获取并切换分支的示意命令文档以 git 协作流程为前提git clone https://gitcode.com/gh_mirrors/mo/mosquitto cd mosquitto git checkout mqtt5注mqtt5分支是 2018 年前后的历史开发分支当前仓库主干已经包含完整的 MQTT 5 支持如需最新稳定功能直接使用主干master/main并参照 README-compiling.md 编译即可。mosquitto_pub / mosquitto_sub 的-D属性选项原文档给出三个命令行示例展示mosquitto_pub与mosquitto_sub通过-D即--property在命令行设置属性。该选项的三段式语法为-D command identifier value -D command identifier name value # user-property 需要 key/value 两项其中command属性所属的报文阶段可选connect、publish、subscribe、unsubscribe、disconnect、willidentifier属性名称使用连字符小写形式如session-expiry-interval、content-typevalue属性值对user-property而言还需要一个额外的name即 key。该解析逻辑实现在 client/client_props.c 的cfg_parse_property()中它先把命令名映射为报文类型mosquitto_string_to_command再把属性名映射为属性 ID 与数据类型mosquitto_string_to_property_info随后用mosquitto_property_check_command校验该属性是否允许出现在该命令中最后按数据类型调用mosquitto_property_add_byte/_int16/_int32/_varint/_binary/_string/_string_pair加入对应的属性链表cfg-connect_props、cfg-publish_props、cfg-subscribe_props、cfg-unsubscribe_props、cfg-disconnect_props、cfg-will_props。数值型属性还会做取值范围检查如 BYTE 型要求0 value UINT8_MAX越界会直接报错。原文档的三个示例示例 1订阅端设置 CONNECT 与 SUBSCRIBE 属性mosquitto_sub -t topic -v -D connect session-expiry-interval 60 \ -D connect user-property key value \ -D subscribe user-property sub-key sub-value该命令设置了CONNECT 报文的session-expiry-interval60 秒即断线后会话保留 60 秒、CONNECT 的用户属性keyvalue、SUBSCRIBE 报文的用户属性sub-keysub-value。示例 2发布端设置 PUBLISH 属性mosquitto_pub -t topic -m {key:value} -D publish content-type application/json该命令给发布的消息附加content-type: application/json让订阅方能识别负载为 JSON 数据是 MQTT 5 内容类型特性的典型用法。示例 3流水线发布 主题别名./sensor_read.sh | mosquitto_pub -t topic -l -D publish topic-alias 1-l--line表示逐行读取 stdin 并逐条发布topic-alias 1告诉 broker这条消息的主题可用别名 1 代替。从 client/pub_client.c 的my_publish()可以看到其实现细节当协议版本为 v5 且设置了topic-alias时从第二帧发布起调用mosquitto_publish_v5(mosq, mid, NULL, ...)即以 NULL 主题发送后续消息完全依赖已建立的别名显著压缩高频上报场景的报文体积。每个命令允许的属性白名单根据 man/mosquitto_pub.1.xml 与仓库中 client/pub_test_properties、client/sub_test_properties 等测试输入文件各命令可设置的属性如下ConnectCONNECT 报文属性类型authentication-data二进制数据mosquitto_pub 中按字符串处理authentication-methodUTF-8 字符串对maximum-packet-size32 位无符号整数receive-maximum16 位无符号整数request-problem-information8 位无符号整数request-response-information8 位无符号整数session-expiry-interval32 位无符号整数建议改用-xtopic-alias-maximum16 位无符号整数user-propertyUTF-8 字符串对PublishPUBLISH 报文属性类型content-typeUTF-8 字符串correlation-data二进制数据按字符串处理message-expiry-interval32 位无符号整数payload-format-indicator8 位无符号整数response-topicUTF-8 字符串topic-alias16 位无符号整数user-propertyUTF-8 字符串对DisconnectDISCONNECT 报文属性类型session-expiry-interval32 位无符号整数user-propertyUTF-8 字符串对Will遗嘱消息属性类型content-typeUTF-8 字符串correlation-data二进制数据按字符串处理message-expiry-interval32 位无符号整数payload-format-indicator8 位无符号整数response-topicUTF-8 字符串user-propertyUTF-8 字符串对will-delay-interval32 位无符号整数此外subscribe命令支持subscription-identifier与user-propertyunsubscribe命令支持user-property参见 client/sub_test_properties 中-D subscribe subscription-identifier 1、-D unsubscribe user-property unsubscribe up等用法。在cfg_parse_property()中auth命令与puback/pubrec/pubrel/pubcomp/suback/unsuback等命令明确被拒绝会返回MOSQ_ERR_NOT_SUPPORTED因为-D只面向客户端主动构造的报文。简化快捷选项-x与-V除-D外客户端还提供常用快捷选项-x session-expiry-interval直接设置 CONNECT 报文的session-expiry-interval属性见 client/pub_client.c 与 man/mosquitto_pub.1.xml。文档特别注明当会话被设置为永不过期-x 0之外的无限值或配合-c干净会话时必须提供客户端 ID-i。-V protocol-version选择协议版本MQTT 5 对应-V 5。从源码可见协议版本常量定义在 include/mosquitto/mqtt_protocol.hv5 报文名称为MQTT、版本号为 5。请求/响应模式源码与测试验证MQTT 5 的请求/响应模式由 PUBLISH 属性response-topic与correlation-data承载。原文档指出当时客户端无法处理收到的 correlation data但当前仓库已补齐这一能力。C 测试用例 test/lib/c/03-request-response-1.c 完整演示了该流程连接后订阅response/topic在on_subscribe回调中调用mosquitto_property_add_string(props, MQTT_PROP_RESPONSE_TOPIC, response/topic)构造属性用mosquitto_publish_v5(mosq, NULL, request/topic, 6, action, 0, 0, props)发布携带响应主题的请求在on_message回调中校验收到的响应负载是否为a response。对应的相关测试还包括03-request-response-2.c、03-request-response-correlation-1.c等它们共同验证了请求/响应与关联数据处理的端到端行为。客户端工具层面mosquitto_rrclient/rr_client.c也通过mosquitto_property_add_string(cfg.publish_props, MQTT_PROP_RESPONSE_TOPIC, cfg.response_topic)在内部使用响应主题属性。属性系统底层libmosquitto 的 v5 属性 API属性是 MQTT 5 的核心扩展其数据模型在 test/mqtt5_props.py 中有完整枚举1 到 42 号属性测试脚本还提供了gen_byte_prop、gen_uint16_prop、gen_uint32_prop、gen_string_prop、gen_string_pair_prop、gen_varint_prop等打包工具用于按 MQTT 5 规范生成属性字节流供各测试用例比对。在库层面lib/property_mosq.c 实现了属性的读取property__read_all与写入property__write_all并提供mosquitto_property_add_byte / _int16 / _int32 / _varint / _binary / _string / _string_pair按数据类型构造属性并追加到属性链表mosquitto_property_free_all释放属性链表mosquitto_string_to_property_info将命令行中的属性名映射为属性 ID 与类型供cfg_parse_property使用。这些 API 在-D命令行解析client/client_props.c、v5 发布/订阅调用mosquitto_publish_v5、mosquitto_subscribe_v5以及大量 v5 测试中反复使用是理解 Mosquitto MQTT 5 支持的关键入口。所有 v5 对外符号均通过 lib/linker.version 与 src/linker.syms 导出。结语从进度报告到稳定能力回顾 mqtt5-progress 这份 2018 年的进度报告可以清晰看到 Mosquitto MQTT 5 支持从部分未处理、接口可能变化的实验状态逐步收敛为今天主干中稳定、可测试的完整实现。文中列出的每一项特性——属性收发、请求/响应、消息过期、主题别名、服务端分配客户端 ID、负载格式指示符、内容类型——都能在当前仓库的源码lib/property_mosq.c、client/client_props.c、客户端工具client/pub_client.c、client/sub_client.c与测试用例test/lib/c 下大量*-v5.c文件中找到对应实现。对开发者而言最快上手路径是使用-V 5指定协议版本用-D为 connect / publish / subscribe / will / disconnect 各阶段附加属性再用mosquitto_pub与mosquitto_sub对跑验证。例如在 A 终端执行mosquitto_sub -t topic -V 5 -v -D connect session-expiry-interval 60在 B 终端执行mosquitto_pub -t topic -V 5 -m {key:value} -D publish content-type application/json即可直观观察到 MQTT 5 属性在命令行层级的完整工作流。赞分享物联网消息队列后端网络/通信【免费下载链接】mosquittoEclipse Mosquitto - An open source MQTT broker项目地址https://gitcode.com/gh_mirrors/mo/mosquitto点击查看免费下载相关推荐Eclipse Mosquitto 的 MQTT 5 支持演进从 2018 开发进展到 v2 完整落地Eclipse Mosquitto 的 MQTT 5 支持演进从 2018 开发进展到 v2 完整落地 Eclipse Mosquitto 在 2018 年后端消息队列消息路由Eclipse Mosquitto Roadmap 深度解析从 1.6 的 MQTT 5 支持到 2.0 的 API 重塑与持久化改进Eclipse Mosquitto Roadmap 深度解析从 1.6 的 MQTT 5 支持到 2.0 的 API 重塑与持久化改进 本文基于 Eclips后端消息队列消息路由Eclipse Mosquitto WebSocket支持浏览器端MQTT通信实现Eclipse Mosquitto WebSocket支持浏览器端MQTT通信实现 MQTTMessage Queuing Telemetry Transp物联网消息队列后端上一篇猫抓扩展 5 分钟上手浏览器资源嗅探完整指南下一篇Windows 资源管理器 HEIC 缩略图 5 分钟装好windows-heic-thumbnails 免费预览指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

rsuite DatePicker 禁用键盘输入:editable 属性实战与源码原理
rsuite DatePicker 禁用键盘输入:editable 属性实战与源码原理

前端UI组件 【免费下载链接】rsuite 🧱 A suite of React components . 项目地址: https://gitcode.com/gh_mirrors/rs/rsuite 点击查看 免费下载 editable 是 rsuite DatePicker 组件中控制输入框是否允许键盘录入日期时间的关键属性。默认情况下 Dat… · 2026/9/26 15:57:10

降AI率工具哪款有效?2026年实测5款清单
降AI率工具哪款有效?2026年实测5款清单

降AI率工具哪款有效?2026年实测5款清单 凌晨两点,导师在群里发来消息:"这段明显是AI写的,自己改。"我盯着屏幕上被标红的段落,眼皮打架,脑子里只有一个问题——降AI率工具到底哪款有效&#xff… · 2026/9/26 15:57:10

isomorphic-git 的 expandRef 详解:把缩写引用展开为完整 ref 名称
isomorphic-git 的 expandRef 详解:把缩写引用展开为完整 ref 名称

开发工具 【免费下载链接】isomorphic-git A pure JavaScript implementation of git for node and browsers! 项目地址: https://gitcode.com/gh_mirrors/is/isomorphic-git 点击查看 免费下载 git.expandRef 是 isomorphic-git(纯 JavaScript 实现的 … · 2026/9/26 15:57:10

AI硬件神器:小白也能实现创意实物化
AI硬件神器:小白也能实现创意实物化

1. 这不是玩具,是创意落地的物理接口“这个AI硬件神器太绝了 小白也能把创意做成实物”——这句话最近在创客圈、设计工作室甚至高校工坊里反复刷屏。我第一次听到是在深圳华强北一家专注教育硬件的小店,店主把一块巴掌大的板子往桌上一放,接… · 2026/9/26 16:27:37

手把手教你如何在 Mac 上用 OpenClaw 部署小龙虾 AI Agent:TaoToken 配置与 Node.js 环境搭建
手把手教你如何在 Mac 上用 OpenClaw 部署小龙虾 AI Agent:TaoToken 配置与 Node.js 环境搭建

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 16:27:37

FluentTweaker功能树详解:如何用检查-勾选-应用三步完成Windows去臃肿
FluentTweaker功能树详解:如何用检查-勾选-应用三步完成Windows去臃肿

FluentTweaker功能树详解:如何用检查-勾选-应用三步完成Windows去臃肿 【免费下载链接】FluentTweaker Windows Slop Remover 项目地址: https://gitcode.com/gh_mirrors/wi/FluentTweaker FluentTweaker(原名 Winslop)是一款基于 Win… · 2026/9/26 16:27:37

气泡浮力与流体动力学:Canvas 模拟水下气泡上升与破裂动效
气泡浮力与流体动力学:Canvas 模拟水下气泡上升与破裂动效

气泡浮力与流体动力学:Canvas 模拟水下气泡上升与破裂动效在现代 Web 互动营销、水下科幻主题大屏以及先锋液体微交互设计中,“晶莹剔透的水下气泡(Underwater Bubbles)升腾与表面张力破裂动效” 是一种能极大赋予界面生机、空灵与… · 2026/9/26 16:27:37

液体封装材料深度解析:先进封装、Underfill与国产替代机遇
液体封装材料深度解析:先进封装、Underfill与国产替代机遇

干了这么多年半导体材料相关的调研,我越来越觉得,液体封装材料是个被低估的赛道。圈内提到封装材料,第一反应通常是颗粒状的EMC(环氧塑封料),但真正到高可靠、高密度、大尺寸芯片的场景里,液态体… · 2026/9/26 16:27:37

串口分线器实战:一路物理串口如何变多路虚拟串口
串口分线器实战:一路物理串口如何变多路虚拟串口

简介:Serial Port Splitter 是一款面向串口通信场景的系统工具,适合设备调试人员和工业控制用户,用于解决物理串口数量不足及多程序争用串口数据的问题。软件通过虚拟串口技术创建多个虚拟端口,让不同应用同时分享同一物理串口&am… · 2026/9/26 16:27:31

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码