最近在调研mqtt服务器的实现,今天稍微记录下,给关注这方面的同学参考。
mqtt 协议的介绍就不具体说了,可以看下上篇文章 https://gamwatcher.blog.csdn.net/article/details/121081436
在搜索了一番之后发现市面上比较多的服务器有下面几种
mosquitto:Eclipse Mosquitto使用 C 语言实现的 MQTT 服务器。
EMQX:使用 Erlang 语言开发的 MQTT 服务器,内置强大的规则引擎,支持许多其他 IoT 协议比如 MQTT-SN、 CoAP、LwM2M 等。
Mosca:使用 Node.JS 开发的 MQTT 服务器,简单易用。
VerneMQ:使用 Erlang 开发的 MQTT 服务器。
这里比较关注的是emqx和mosquitto 两款,简单介绍下
Mosquitto 是一个小型轻量的开源 MQTT Broker,由 C/C++ 语言编写。Mosquitto 采用单核心单线程架构,支持部署在资源有限的嵌入式设备,接入少量 MQTT 设备终端,并实现了 MQTT 5.0 和 3.1.1版本协议。
EMQ X 与 Mosquitto 均完整支持了 MQTT 协议特性,但 EMQ X 支持更多通信协议以及私有协议接入。应用层的功能拓展方面,Mosquitto 缺乏开箱即用的如认证鉴权、规则引擎、数据持久化与高性能消息桥接(EMQ X 企业版)等业务相关功能; 监控运维与可视化管理方面, EMQ X 有完整的现有功能和拓展方案支持;基础功能上 Mosquitto 集群功能羸弱,官方和第三方实现的集群方案均难以支撑物联网大规模海量连接的性能需求。
因此 Mosquitto 不适合用来做规模化服务的 MQTT Broker,但由于其足够轻量精简,可以运行在任何低功率单片机包括嵌入式传感器、手机设备、嵌入式微处理器上,在物联网边缘消息接入上是较好的技术选型,结合桥接功能能够实现消息的本地处理并透传至云端。
通过上面的对比,基本选定了使用emqx,就没过多研究Mosquitto,所以这里重点看了下emqx的技术文档
emqx 的常规属性就不重要了,不能成为选择的必要条件,这里只看下关注的几个特性
因为mqtt 5.0 提供了增强授权的,所以我们比较关注emqx是否能提供更严格的授权,在查阅了文档之后发现mqtt提供了多种的鉴权机制,具体的可以参考官方的文档
灵活多样认证授权,零开发投入保障 IoT 安全 | EMQ,
开发中总有各种奇奇怪怪的需求,所以就关注是不是方便扩展,在调研之前知道emqx是开源的,erlang 开发的,还是有点反感的,毕竟不太懂erlang,想要做点定制开发很麻烦,
emqx比较好的就是提供了的多语言的插件机制,技术文档可以参考
使用 Python 开发 EMQX MQTT 服务器插件 | EMQ
使用 Java 开发 EMQX MQTT 服务器插件 | EMQ
虽然emqx是开源的,但是只是基础版本,一些功能只在付费版才能看到,比如和其他中间件的桥接。
emqx 部署方式还是很多样,而且给了相当多的教程。我们在开发中常用的直接部署,docker,docker-compose ,k8s这些常用的部署方式都有文档,很方便,完全不慌。
总结
这是在调研的时候的一些记录,仅供参考