
物联网消息队列后端【免费下载链接】mosquittoEclipse Mosquitto - An open source MQTT broker项目地址https://gitcode.com/gh_mirrors/mosquit/mosquitto点击查看免费下载本篇文章基于 Mosquitto 官方博客在 2012 年发布的 mqtt2pachube 历史文章深入讲解这款将 MQTT 消息转发到 Pachube后更名为 Cosm、Xively物联网数据平台的桥接工具它的设计动机、主题到数据流datastream的映射思路、对 Mosquitto 客户端库版本的要求以及围绕它沉淀下来的 MQTT 客户端实操方法。读完本文你将理解传感器逐条消息 → MQTT 订阅 → 云端数据流这条数据链路的经典实现方案并掌握用 Mosquitto 命令行客户端对接此类平台的完整手法。说明该文章发布于 2012 年已被官方标记为Obsolete过时文中涉及的 Pachube 服务早已经历 Cosm、Xively 的改名与业务调整。本文将其作为 Mosquitto 生态中MQTT 与外部数据平台集成的代表性案例来解读所有事实均以当前仓库内的文档、手册与变更记录为准。一、背景与动机为什么需要 mqtt2pachube2012 年初Mosquitto 作者在官方博客中介绍了一个自己编写的工具mqtt2pachube其核心诉求非常具体当时 Pachube 提供的客户端库对单一 datastream 的 feed 更新和更新 feed 内全部 datastream支持良好但对单独更新任意一个 datastream的支持却很有限。而传感器数据往往以一条消息对应一次读数的方式逐个到达这让直接把传感器消息灌入 Pachube 变得很困难。换句话说传感器侧产生的是高频、离散、逐个到达的消息流而 Pachube 侧需要的是一次性、整块的数据流更新——两者之间存在明显的阻抗失配。mqtt2pachube就是为此而生的中间桥接层它订阅 MQTT 主题收到消息后按主题规则把消息映射到指定的 Pachube feed 与 datastream id从而完成传感器 → MQTT → Pachube 数据流的自动流转。与同期生态的呼应这篇博文并非孤立事件。仓库中的同期文章可以佐证当时的上下文Challenge: Web based MQTT graphing 提到test.mosquitto.org通过一个 IBM broker 的数据馈送开始在energy/主题树下发布英国发电与用电数据并号召开发者用 MQTT 把数据接到网页图表中Quick start guide for MQTT with Pachube/Cosm/Xively 则是紧随其后、更完整的MQTT 对接 Pachube操作指南说明当时社区对MQTT 上云的需求已经相当集中。mqtt2pachube正是这条上云路径上的一次具体工程实践。二、工具核心原理订阅选择 主题到数据流映射博文对mqtt2pachube工作方式的描述只有两句话但信息量十足mqtt2pachubeallows you to choose what mqtt subscriptions to make and then match incoming messages by their topics to a pachube feed and datastream id.可以将其拆解为两个明确的设计要点订阅选择Subscription Selection用户可以自行决定建立哪些 MQTT 订阅而不是写死在程序里。这意味着同一套工具可以灵活对接不同的传感器主题树例如energy/generation/...、sensors/kitchen/...等。主题匹配Topic Matching每条到达的消息按主题被匹配到一个Pachube feed id与datastream id消息负载payload作为该数据流的新值提交。这种按主题路由到数据流的设计本质上就是后来 IoT 平台集成中普遍采用的主题即数据路由表思路。虽然仓库中没有mqtt2pachube工具本身的源码它托管在外部代码托管站点且已标记为过时但从 Mosquitto 客户端库的角度看主题匹配正是这一类桥接程序的通用基础能力——Mosquitto 客户端库为此提供了专门的 APIinclude/mosquitto/libcommon_topic.h 中声明了mosquitto_topic_matches_sub()用于判断某个具体主题是否与某个订阅可含/#通配符匹配同期变更记录显示该函数于 0.15 时代加入见下文版本小节后续又不断修复了作为末级、foo/bar与foo/bar/#边界等匹配细节见 ChangeLog.txt 中历次 Fix mosquitto_topic_matches_sub()... 条目。对于任何想自己实现MQTT → 第三方数据平台桥接的开发者主题匹配这一环都可以直接复用这些库函数而不必自己处理通配符展开。三、版本要求与编译限制0.15.90 与客户端库的不足博文明确指出了当时的使用前提At the moment it is still experimental, but seems to work. It has highlighted a shortcoming in the mosquitto client library, so requires version 0.15.90 (ie. the in-progress work for the next release).这段描述包含三个关键事实工具仍处于实验阶段作者自述看起来能用seems to work属于边用边验证的状态它暴露了 Mosquitto 客户端库的一个缺陷因此必须依赖开发中的 0.15.90 版本——即0.15 发布后、1.0 正式版之前的在研版本0.15.90 是 Mosquitto 的开发版编号惯例没有 Windows 支持也没有二进制安装包感兴趣的人只能自己编译源码。用仓库中的版本历史可以还原这一时间线ChangeLog.txt 记录0.15 - 201202052012 年 2 月 5 日发布该版本在客户端库部分新增了mosquitto_topic_matches_sub()、mosquitto_sub_topic_tokenise()等主题工具函数并修复了 messages to topica/bincorrectly matching on a subscriptionaif another subscriptiona/#exists 这类订阅重叠时的错误匹配问题紧随其后1.0 - 201208142012 年 8 月 14 日发布正式落地了 SSL/TLS、TLS-PSK、mosquitto_connect_async()、回调签名重构等一大批特性0.15.90 正是这条通往 1.0 的中间路线上承载在研特性的版本号同期博文 www/posts/2012/07/upcoming-release.md 也印证了这一点0.15.90 这类编号正是下一个版本即 1.0的在研版本。由此可以推断mqtt2pachube依赖的正是 0.15 到 1.0 之间客户端库新增/修正的主题匹配与回调能力。换句话说这个小小的工具实际上是 Mosquitto 客户端库在 0.15/1.0 时代能力演进的早期验证者。四、实际应用案例test.mosquitto.org 数据驱动的两个 Pachube Feed为了验证工具的可用性作者用test.mosquitto.org公开 broker 上的数据创建了两个 Pachube feed 作为展示test.mosquitto.org details对应 feed 43810UK energy data - generation source percentage对应 feed 47080第二个 feed 与仓库中另一篇博文直接相关Challenge: Web based MQTT graphing 中说明test.mosquitto.org在energy/主题树下发布英国能源发电与需求数据数据由 IBM broker 提供并提到可用它做发电机组成比例饼图电网频率仪表盘等可视化。mqtt2pachube将这批energy/主题下的消息按比例映射为 Pachube feed 的 datastream正是把M2M 消息流变成云端可查询数据流的完整闭环演示。这两条 feed 也直观展示了桥接的价值MQTT 侧的实时消息流经过桥接后变成 Pachube 侧带历史记录的图表数据供 Web 应用直接消费。五、配套实操用 Mosquitto 命令行客户端对接此类平台虽然mqtt2pachube工具本身已过时但它所属的MQTT ↔ 数据平台集成场景在同期沉淀下了大量可直接复用的命令行手法。仓库中的 Quick start guide for MQTT with Pachube/Cosm/Xively 给出了完整示例这里摘录并补充说明。5.1 发布数据单条消息以 XivelyPachube 后来的名字为例用 API key 作为用户名向 feed 的 CSV 端点发布单条数据mosquitto_pub -h api.xively.com -u your xively api-key -t /v2/feeds/504.csv -m 0,29含义连接到api.xively.com以 API key 作为用户名向 feed 504 的 CSV 主题发布0,29——即 datastream 0 的新值为 29。等价写法是直接指定 datastreammosquitto_pub -h api.xively.com -u your xively api-key -t /v2/feeds/504/datastreams/0.csv -m 295.2 发布数据从标准输入逐行发布mosquitto_pub支持从 stdin 读取数据并逐行发布这正好贴合传感器逐条读数的场景。在 Unix 类系统上可以这样串联sensor_read | mosquitto_pub -h api.xively.com -u api-key -t /v2/feeds/504/datastreams/0.csv -l其中-l--stdin-line选项表示把 stdin 的每一行当作一条独立消息发送。该选项的权威说明见 man/mosquitto_pub.1.xmlSend messages read from stdin, splitting separate lines into separate messages.前提是sensor_read这类假想的读数程序需要把每次读数打印为一行文本。同期手册示例也给出了同样的惯用法——用 Current Cost 电表解析脚本配合-l逐行发布见 man/mosquitto_pub.1.xml 中read_cc128.pl | mosquitto_pub -t sensors/cc128 -l的例子。5.3 订阅获取数据MQTT 世界里取数据靠订阅。同样指定 CSV 端点即可持续收到该 datastream 的更新mosquitto_sub -h api.xively.com -u api-key -t /v2/feeds/504/datastreams/0.csv每次 datastream 0 更新时mosquitto_sub会打印一行 CSV 数据。5.4 遗嘱消息Last Will and Testament断线监控MQTT 的遗嘱特性是连接监控的利器客户端连接时可向 broker 登记一个遗嘱topic message若客户端未发送 DISCONNECT 而异常断开broker 会代为发布该遗嘱消息。利用这一点客户端上线时发布1、同时登记遗嘱在意外断开时向同一主题发布0监控方即可通过订阅该主题判断客户端是否在线mosquitto_sub -h api.xively.com -u api-key -t /v2/feeds/504/datastreams/0.csv --will-topic /v2/feeds/12345/datastreams/0.csv --will-payload 0示例中若mosquitto_sub意外断开Xively broker 会向 feed 12345 的 datastream 0 发布值0。指南原文也客观指出受mosquitto_sub能力所限这个例子并非最实用——要发挥 MQTT 的完整优势主题通配符、持久会话、遗嘱组合等通常还是应该为具体应用编写自己的客户端。六、历史视角从 Pachube 到 Cosm/Xively及对今日的启示从仓库内的时间线可以还原这条演进的完整脉络2012-01test.mosquitto.org 上线公开 Mosquitto broker 可供任何人连接2012-02mqtt2pachube发布打通 MQTT → Pachube 数据流本文主题2012-03Quick start guide for MQTT with Pachube/Cosm/Xively 发布Pachube 官宣支持 MQTT beta 接入命令行与自研客户端两条路径都有了官方背书。Pachube 随后先后更名为 Cosm、XivelyMQTT 直连数据平台也从实验性质变为平台原生能力。今天回看这篇 Obsolete 博文其价值在于清晰地记录了一个通用问题与通用解法问题传感器消息是离散、逐条的而云端数据流平台偏好像整块更新解法中间桥接层订阅 MQTT、按主题路由到目标 feed/datastream把消息流翻译成数据流。这种订阅-路由-上报的三段式架构在今日的 IoT 数据管道、边缘网关、规则引擎中依然随处可见。如果你要在现代 Mosquitto 上实现类似桥接客户端库的mosquitto_topic_matches_sub()家族函数include/mosquitto/libcommon_topic.h依然是做主题路由最可靠的地基。参考资料仓库内本文主体www/posts/2012/02/mqtt2pachube.mdMQTT 对接 Pachube/Cosm/Xively 实操指南www/posts/2012/03/quick-start-guide-for-mqtt-with-pachube.mdUK 能源数据来源背景www/posts/2012/01/challenge-web-based-mqtt-graphing.md公开测试 broker 上线公告www/posts/2012/01/mosquitto-test-server.md版本历史0.15 / 1.0 变更记录ChangeLog.txtmosquitto_pub手册-l/--stdin-line等选项man/mosquitto_pub.1.xml主题匹配 API 声明include/mosquitto/libcommon_topic.h赞分享物联网消息队列后端【免费下载链接】mosquittoEclipse Mosquitto - An open source MQTT broker项目地址https://gitcode.com/gh_mirrors/mosquit/mosquitto点击查看免费下载相关推荐Mosquitto 快速入门用 MQTT 命令行客户端对接 Xively原 Pachube/Cosm数据平台Mosquitto 快速入门用 MQTT 命令行客户端对接 Xively原 Pachube/Cosm数据平台 本文整理自本仓库历史博客《Quick sta后端消息队列消息路由EMQX PostgreSQL 数据桥接将 MQTT 物联网数据写入 PostgreSQL 的完整指南EMQX PostgreSQL 数据桥接将 MQTT 物联网数据写入 PostgreSQL 的完整指南 导读 本文以 EMQX 开源仓库中的 apps/em后端物联网消息队列通信GP2040-CE固件升级终极指南从v0.7.11快速升级到v0.7.12GP2040 CE固件升级终极指南从v0.7.11快速升级到v0.7.12 GP2040 CE是一款专为Raspberry Pi Pico和其他RP2040开嵌入式硬件开发游戏开发上一篇齿轮时变啮合刚度计算资源深入解析与应用下一篇【免费下载】 齿轮时变啮合刚度计算深入解析与应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考