1.MQTT Broker 选型
2.如果要自己搭建物联网平台,国内外有哪些用户体验比较好的
3.å¦ä¹ ç©èç½åºç¨å·¥ç¨å¸,以åè½ä»äºåªäºå·¥ä½å²ä½
4.Mqtt开发笔记:windows下C++ ActiveMQ客户端介绍、编译和使用
MQTT Broker 选型
MQTT Broker选型 在构建分布式系统时,选择合适的MQTT Broker至关重要,它负责接收发布者发布的消息并将其分发给不同的订阅者。市面上有许多MQTT Broker可供选择,以下是spring框架源码分析一些常用选项的对比与分析。Mosquitto
Mosquitto是由Eclipse出品的开源MQTT Broker,基于C/C++语言编写,当前版本为1.5.8。其特点包括支持MQTT 3.1/3.1.1协议,但性能上存在一些限制,如内存优化、多线程的锁机制等。它适合运行在低功耗设备上,如嵌入式传感器、手机和微处理器,但不适用于大规模云服务。官方文档显示其理论支持约万连接,实际使用中还需根据具体情况进行评估。EMQ (emqttd)
EMQ,一款国人开发的异动率源码开源MQTT Broker,目前版本为2.0和3.0,2.0版本支持本地共享订阅,3.0版本新增集群共享订阅功能。EMQ具有完整QoS支持、单节点万连接能力、分布式集群支持、多种验证插件(如LDAP、MySQL、PostgreSQL等)以及API、Web监控界面等特性。官方宣称支持MQTT 3.1、3.1.1和5.0版本,并在性能上做了优化。然而,开源版本不支持服务器内部消息持久化,这是其一个显著限制。HiveMQ
HiveMQ是一款企业级MQTT Broker,使用Java编写,功能丰富,支持MQTT 3.1、NG源码论坛3.1.1和5.0版本,完整QoS支持,分布式集群,持久化支持,流量控制,IPv6支持等。其唯一限制在于高昂的费用,没有公开源码供参考。集群基于Jgroups,数据同步通过自定义一致性哈希和VectorClock实现。多线程和并发控制使用Google的guava库,代码质量高。MqttWk
MqttWk是一个基于nutzboot、netty、redis和kafka实现的MQTT服务开源Broker,代码简洁易懂。它支持MQTT和Websocket连接方式,集群功能和消息分发重试,但存在一些限制,如消息队列非队列结构、稀有圈源码消息分发重试机制较差、主题限制等。它是上生产的项目,经历过2万设备连接的考验。Jmqtt
Jmqtt是一个基于Java的开源MQTT Broker,对现有开源Broker进行了优化,特别是在CONNECT处理和Session过期管理方面。支持MQTT和Websocket连接方式,使用RocksDB进行本地存储,但不支持集群和SSL。Moquette
Moquette是一个功能齐全的Java编写的开源MQTT Broker,提供完整的QoS服务和认证方式,支持多种持久化存储。然而,0.版本中存在内存泄漏问题,官方修复后发布为irubant/moquette。其集群功能仅使用Hazelcast作为消息总线,不支持共享订阅。 综上所述,选择合适的趣步 源码MQTT Broker需考虑应用的具体需求,包括连接数量、协议版本、性能要求、集群支持、消息持久化、安全认证等因素。在选择时,应充分评估各Broker的特性和限制,以满足实际应用场景的需要。如果要自己搭建物联网平台,国内外有哪些用户体验比较好的
ThingLinks平台是基于Spring Cloud架构的物联网平台,提供百万链接支持,具备自定义扩展功能与多种协议交互能力。平台支持设备连接管理、规则引擎功能,以及可视化和时序数据库,实现高效的数据处理与分析。
系统采用前后端分离模式,前端使用VUE框架,后端则基于Spring Boot、Spring Cloud & Alibaba技术栈构建。MqttBroker采用Netty、Reactor3、Reactor-netty实现集群化部署,Nacos作为注册中心与配置中心,Redis用于权限认证,Sentinel管理流量控制,Seata支持分布式事务,TDengine作为时序数据库提供高效的大数据处理。
ThingLinks平台的核心特性包括设备连接、规则引擎、可视化与时序数据库,实现设备管理与数据处理的高效性。系统模块包括系统管理、系统监控、系统工具、设备集成、设备调试与规则引擎消息转发等功能。
具体功能列表覆盖了系统管理、设备集成、设备调试与规则引擎消息转发等方面,提供丰富的API与工具支持。ThingLinks平台支持设备管理、产品管理、协议管理与规则引擎联动,提供实时日志与命令下发功能,实现设备的远程控制与管理。
ThingLinks平台提供了在线演示地址:thinglinks.mqttsnet.com,账号密码为:admin/adminthinglinks,同时源码地址也已公开,便于开发者进一步了解与使用。
å¦ä¹ ç©èç½åºç¨å·¥ç¨å¸,以åè½ä»äºåªäºå·¥ä½å²ä½
ç©èç½åºç¨å·¥ç¨å¸ç人æ群ä½ï¼ä¸»ä½åºè¯¥å æ¬ITåOTå·¥ç¨å¸ãä»äºæ¹å大æ¦æï¼æºæ §äº¤éãç¯å¢ä¿æ¤ãæ¿åºå·¥ä½ãå ¬å ±å®å ¨ãå¹³å®å®¶å± ãæºè½æ¶é²ãå·¥ä¸çæµãç¯å¢çæµãè人æ¤çã个人å¥åº·ãè±åæ ½å¹ãæ°´ç³»çæµãé£å溯æºãææ 侦æ¥åæ æ¥æéçå¤ä¸ªé¢åèå ·ä½
å·¥ä½å²ä½æï¼ç¡¬ä»¶è®¾è®¡å¸ãåµå ¥å¼åºä»¶å¼å人åãæ 线é讯ä¸å®¶ ãå端å¼å人å ãå端å¼å人å ãåºç¨å¼å人å ãèªå¨åä¸ç³»ç»éæå·¥ç¨å¸ ãæ°æ®ç§å¦å®¶çã
硬件设计å¸ï¼å¤§å¤æ°ç©èç½é¡¹ç®é½æ¶åæç§å½¢å¼çå®å¶ç¡¬ä»¶è®¾è®¡ã硬件çå¤æ度å 项ç®èå¼ãå¨æäºæ åµä¸ï¼ä½¿ç¨ç¡¬ä»¶æ¨¡åååè设计ï¼åºç¡ç¥è¯åçµæ°å·¥ç¨ç¥è¯å°±è¶³å¤äºãèæäºæ´å¤æç项ç®åéè¦æ´å¤çç»éªåä¸ä¸ç¥è¯ã常è§çææ¯æå°å·çµè·¯æ¿ï¼PCBï¼è®¾è®¡ãæ 线çµé¢çä¸å¤©çº¿è®¾è®¡ãæ¶éï¼ä¿¡å·è·¯ç±ç¸å ³çç»éªãä½åè设计ååèä¼åç
åµå ¥å¼åºä»¶å¼å人åï¼è®©ç¡¬ä»¶åæ¥ä½ç¨ï¼ä½ å°±éè¦åµå ¥å¼å¼å人åãä»ä»¬æ¯ä»äºæåºå±ãææ¥è¿è£¸æºç¡¬ä»¶ç软件å¼å人åãè¿æ ·ç软件称为åºä»¶ï¼ä»äºè½¯ä»¶å硬件ä¹é´çåºä»¶ï¼ãä¸è¬è¿äºå¼å人åçèæ¯ç»åäºçµæ°å·¥ç¨ã计ç®æºä½ç³»ç»æå软件å¼åãåµå ¥å¼å¼å人åçå·¥ä½éè¦ä¸æç»ç¡¬ä»¶çååçæ¬æ交éï¼å æ¤é常ä»ä»¬çåå ¬æ¡çèµ·æ¥é½å¾åä¹±ã 常è§çææ¯æç¼ç¨è¯è¨ï¼Cãæ±ç¼è¯è¨ãCï¼ãå®æ¶æä½ç³»ç»ï¼RTOSï¼ç»éªï¼FreeRTOSãContikiãZephyrï¼ãåµå ¥å¼Linuxãæºä»£ç çæ¬æ§å¶ãç©çåä¿¡æ¯å®å ¨ç
æ 线é讯ä¸å®¶ï¼å¤§å¤æ°ç©èç½é¡¹ç®é½æ¯æ 线çï¼ä½æ 线ææ¯é½å¾é¾ï¼å 为æ 线éç©çä¸è½¯ä»¶çåéå¤æ度äºä¸èº«ãé常æ 线éä¿¡ä¸å®¶é½æ¥èªæ 线éä¿¡ãç½ç»åè®®å软件å¼åã对äºå¤§åç©èç½ç³»ç»æ¥è¯´ï¼æ¥ææ 线éä¿¡çä¸é¿æè½éå½å°ç¡®å®ç½ç»ä¸é信模å¼ãèæ¶è´¹çº§ç©èç½ç³»ç»åéè¦æ 线éä¿¡ä¸é¿æ¥ç¡®ä¿éè¿èç顺å©å°å°è®¾å¤è¿æ¥å°ç¨æ·çæºè½ææºã 常è§çææ¯æç½ç»æ¨¡æãæ 线ç½æ ¼ç½ç»ã对æ çº¿ä¼ æææ¯çææ¡ã对åèçææ¡ãåè®®ï¼TCP/IPãIPv4ãIPv6ãRPLãTLSãWiFiãèçã6lowpanãZigBeeãLoRAãMQTTãCoAPï¼
å端å¼å人åï¼å¨ç©èç½ç³»ç»ä¸ï¼å端éè¦å¤çæ°æ®åºååºç¨ç¨åºé»è¾ãé常ï¼å端é½é¨ç½²å¨äºä¸»æºä¸ï¼å¹¶è´è´£åå¨æ¥èªç©èç½è®¾å¤çæ°æ®ã对ç¨æ·è¿è¡èº«ä»½éªè¯ã为å端以åä¸å ¶ä»ç³»ç»çéææä¾APIã 常è§çææ¯æç¼ç¨è¯è¨ï¼JavaScriptãGoãPythonãRubyï¼ãæ°æ®åºï¼MySQLãMongoDBãRedisï¼ãå¼åè¿ç»´ç»éªãäºå¹³å°ï¼äºé©¬éçAWSãHerokuã微软çAzureï¼
å端å¼å人åï¼å¤§å¤æ°ç©èç½é¡¹ç®é½æç½é¡µå½¢å¼çå端ãç¨æ·å¯ä»¥éè¿è¿ç±»ç½é¡µä¸ç³»ç»äº¤äºãå æ¤ï¼è¿äºç½é¡µéè¦åå°æäºä½¿ç¨ãå®å ¨ãå¯å¨æ常è§çWebæµè§å¨ä¸è¿è¡å¹¶ä¿æææ°ç¶æãè¿äºå端æ¯ç¨HTMLå¼åçï¼èä¸é常é½ä¼éç¨æäºç°æçJavaScriptå端æ¡æ¶ãå端å¼å人åéè¦éè¿å¤§éè¾åºå°ç½é¡µä¸çææ¬æ¥å建è§è§ä½éªã 常è§çææ¯æUI/UX设计ãç¨æ·è®¿è°ä¸äººæºäº¤äºçç»éªãHTMLãCSSãJavascriptãWebå¼åæ¡æ¶ï¼Vue.jsãReactãBootstrapï¼
åºç¨å¼å人åï¼è®¸å¤é¢åç¨æ·çç©èç½é¡¹ç®é½éè¦ä½¿ç¨ç§»å¨åºç¨ä½ä¸ºç¨æ·çé¢ãéç项ç®çæ¨è¿ï¼ç§»å¨åºç¨ä½éªçéè¦æ§è¶æ¥è¶çªåºãé常ï¼æ们éè¦å¼ååç»´æ¤ä¸¤ä¸ªçæ¬ï¼iOSåAndroidãææ¶ä¹å¯ä»¥å¼åæ··ååçåºç¨ï¼é常ç¨HTMLå¼åï¼ã大å¤æ°åºç¨å¼å人åé½æ¸ æ¥åçä¸æ··åæ¡æ¶çä¼ç¼ºç¹ã 常è§çææ¯æAndroidãiOSå¼ååç/æ··åæ¡æ¶ï¼Phonegap/CordovaãIonicãAngularãReactãVueï¼ãç¼ç¨è¯è¨ï¼JavaãSwiftãObjective CãJavaScriptï¼
èªå¨åä¸ç³»ç»éæå·¥ç¨å¸ï¼è®¸å¤ç©èç½é¡¹ç®é½éè¦ä¸ç°æ软件éæã软件éææ¯ä¸é¡¹ç»å¸¸è¢«ä½ä¼°çä»»å¡ï¼æ们常常éè¦è±è´¹å¤§éç²¾åï¼è¿ç¨ä¸å¥ç¹å®çææ¯æè½åå¾æåãæ¤å¤ï¼ä¸æ¦è½¯ä»¶éæå¼å§ï¼ä½ å°±å¿ é¡»ç¡®ä¿éæä¿ææ£å¸¸è¿è¡ãè¿æ¶æ们就éè¦éç¨èªå¨æµè¯ãç³»ç»éæåèªå¨åå·¥ç¨å¸éè¦æ¥æ大éå®è·µç»éªååæ°ï¼å 为è¿æ¯ä¸é¡¹è°å·¨çå·¥ä½ã 常è§çææ¯æèªå¨æµè¯æ¡æ¶ï¼JenkinsãMochaãTravisï¼ãREST APIãç¼ç¨è¯è¨ï¼JavascriptãJavaãPythonãBashï¼
æ°æ®ç§å¦å®¶ï¼ç©èç½é¡¹ç®é½éè¦å´ç»æ°æ®å±å¼ï¼èä¸ä½ éè¦å åå©ç¨è¿äºæ°æ®ãå¨é¡¹ç®çæ©æé¶æ®µï¼è¿é¨åçå·¥ä½å¯è½å¾ç®åï¼åªéå°å ³é®ç»©æææ æ¾å ¥Excelå·¥ä½è¡¨ä¸è¿è¡æ¯è¾å³å¯ãä½æ¯éç项ç®çåå±ï¼ä½ éè¦é对æ°æ®å±å¼æ´æ·±å ¥çåæãè¿æ¶å°±éè¦æ°æ®ç§å¦å®¶ç帮å¿ãæ°æ®ç§å¦å®¶å¯ä»¥éè¿å¤æçæ°æ®ï¼å¯»æ¾æ¨¡å¼ä»¥åå¯ä»è¯¸è¡å¨çä¿¡æ¯ï¼èè¿ææ¯æ°æ®çæç»ä»·å¼ã 常è§çææ¯æç»è®¡ã人工æºè½ãæºå¨å¦ä¹ ãæ°æ®ææãç¼ç¨è¯è¨ï¼MatlabãRãPythonï¼
Mqtt开发笔记:windows下C++ ActiveMQ客户端介绍、编译和使用
前话
项目需求驱使我们转向 MQTT 协议的实现,由于 QtMqtt 库不支持队列模式(点对点),而只能使用订阅/发布者模式,我们决定采用 C++ ActiveMQ 进行开发。
MQTT 协议
MQTT,即消息队列遥测传输协议,是一种基于发布/订阅模式的轻量级通讯协议,IBM 在 年发布。其优点在于,以极低的代码量和带宽消耗提供即时可靠的消息服务,广泛应用于物联网、小型设备和移动应用。
设计原则与特点
MQTT 的核心特点是发布/订阅消息模式,实现一对多的消息发布,减少应用程序间的耦合。它对负载内容进行屏蔽的高效传输,基于 TCP/IP 提供网络连接,支持三种消息发布服务质量。它的小型传输、低开销和客户端异常中断机制,使其非常适合物联网领域,尤其适用于传感器与服务器间的通信,以及信息收集。
发布/订阅者模式
MQTT 是基于客户端-服务器的消息发布/订阅传输协议,适用于受限环境,如机器与机器通信、物联网应用,特别适合传感器和服务器通信,以及小型设备的运算能力和带宽相对不足的情况。
MQTT 服务器
MQTT 协议中的服务器角色称为“消息代理”,可以是应用程序或设备,位于消息发布者和订阅者之间,负责数据推送。
MQTT 协议中的方法
MQTT 定义了一系列方法(动作),用于操作服务器上的资源,包括数据处理和生成。主要方法包括读取、写入、订阅和发布等。
CMS 客户端
CMS API 是一种类似 JMS 的 C++ API,用于与消息代理进行交互,如 Apache ActiveMQ,它使客户端代码更加整洁、易于维护。
下载与编译 ActiveMQ-CPP
下载 ActiveMQ-CPP 的最新 Windows 版本源码,推荐访问官网或 CSDN 下载页面。使用 VS 编译 ActiveMQ-CPP。
编译步骤
1. 解压下载的压缩文件至专用文件夹。
2. 使用 VS 打开编译工程文件。
3. 编译“avtivemq-cpp”时遇到“/ZI”和“/Gy-”命令行选项不兼容的错误。
4. 通过手动更改“/Zi”和“/Gy”命令为兼容版本来解决。
5. 继续编译工程生成 debug 和 release 版本。
6. 编译通过,切换到 release 版本后,需要重新配置包含头文件属性并编译。
编译 APR-1.7.0 库
ActiveMQ 依赖 APR 库,其相关信息在源码根目录的 README.txt 中提供。首先下载 APR 库,解压至专用编译文件夹,使用 CMake 配置工程,生成 VS 工程文件。然后,使用 CMake 生成 APR 库,通过 VS 打开并编译工程,最终完成头文件和库文件的归类整理。