物联网之MQTT3.1.1和MQTT5协议 (20) MQTT 相关开源实现Server或Broker列表(会不断更新)
Posted YuYunTan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了物联网之MQTT3.1.1和MQTT5协议 (20) MQTT 相关开源实现Server或Broker列表(会不断更新)相关的知识,希望对你有一定的参考价值。
文章目录
前言
本次博文就MQTT实现进行描述,后续会陆续更新相关内容。
broker列表
整体比较(MQTT 官网提供)
Server | QoS 0 | QoS 1 | QoS 2 | auth | bridge | $SYS | SSL | dynamic topics | cluster | websockets | plugin system |
---|---|---|---|---|---|---|---|---|---|---|---|
2lemetry | ✔ | ✔ | ✔ | ✔ | ✔ | § | ✔ | ✔ | ✔ | ✔ | ✘ |
Jmqtt | ✔ | ✔ | ✔ | ✔ | ✔ | § | § | ✔ | § | ✔ | ✔ |
Apache ActiveMQ | ✔ | ✔ | ✔ | ✔ | ✘ | ✘ | ✔ | ✔ | ✔ | ✔ | ✔ |
Apache ActiveMQ Artemis | ✔ | ✔ | ✔ | ✔ | ✘ | ✘ | ✔ | ✔ | ✔ | ✔ | ✔ |
Bevywise IoT Platform | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | rm |
emitter | ✔ | § | ✘ | ✔ | ✘ | ✘ | ✔ | ✔ | ✔ | ✔ | ✘ |
emqttd | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
flespi | ✔ | ✔ | ✔ | ✔ | ✘ | ✘ | ✔ | ✔ | ✔ | ✔ | ✘ |
GnatMQ | ✔ | ✔ | ✔ | ✔ | ✘ | ✘ | ✘ | ✔ | ✘ | ✘ | ✘ |
HBMQTT | ✔ | ✔ | ✔ | ✔ | ✘ | ✔ | ✔ | ✔ | ✘ | ✔ | ✔ |
HiveMQ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
IBM WIoTP Message Gateway | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
JoramMQ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
Mongoose | ✔ | ✔ | ? | ? | ? | ? | ? | ? | ? | ? | ? |
moquette | ✔ | ✔ | ✔ | ✔ | ? | ? | ✔ | ? | rm | ✔ | ✘ |
mosca | ✔ | ✔ | ✘ | ✔ | ? | ? | ? | ? | ✘ | ✔ | ✘ |
mosquitto | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | § | ✔ | ✔ |
MQTT.js | ✔ | ✔ | ✔ | § | ✘ | ✘ | ✔ | ✔ | ✘ | ✔ | ✘ |
MqttWk | ✔ | ✔ | ✔ | ✔ | ✔ | ? | ✔ | ✔ | ✔ | ✔ | ✘ |
RabbitMQ | ✔ | ✔ | ✘ | ✔ | ✘ | ✘ | ✔ | ✔ | ? | ? | ? |
RSMB | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✘ | ✔ | ✘ | ✘ | ? |
Software AG Universal Messaging | ✔ | ✔ | ✔ | ✔ | ✘ | ✘ | ✔ | ✔ | ✔ | rm | ✘ |
Solace | ✔ | ✔ | ✘ | ✔ | § | ✔ | ✔ | ✔ | ✔ | ✔ | ✘ |
SwiftMQ | ✔ | ✔ | ✔ | ✔ | ✔ | ✘ | ✔ | ✔ | ✔ | ✘ | ✔ |
Trafero Tstack | ✔ | ✔ | ✔ | ✔ | ✘ | ✘ | ✔ | ✔ | ✘ | ✘ | ✘ |
VerneMQ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
WebSphere MQ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ? | ? | ? |
Broker | 开源 | 语言 | 连接方式 | QoS | 共享订阅 | 持久化 | 集群 |
---|---|---|---|---|---|---|---|
mosquitto | ✔ | C/C++ | 4种 | 全部 | ✘ | ? | ✘ |
hui6075/mosquitto | ✔ | C/C++ | 4种 | 全部 | ✘ | ? | ✔ |
moquette0.10 | ✔ | Java | 4种 | 全部 | ✘ | ✔ | ✔ |
moquette0.12 | ✔ | Java | 4种 | 全部 | ✘ | § | ✘ |
EMQ2.0+ | ✔ | Erlang | 4种 | 全部 | ✘ | ✔ | ✔ |
EMQ3.0+ | ✔ | Erlang | 4种 | 全部 | ✔ | ✔ | ✔ |
EMQ PLUS | ✘ | Erlang | 4种 | 全部 | ✔ | ✔ | ✔ |
Jmqtt1.1.0 | ✔ | Java | 无SSL | 全部 | ✘ | ✔ | ✘ |
MqttWk | ✔ | Java | 4种 | 全部 | ✘ | § | § |
HiveMQ | ✔ | Java | 4种 | 全部 | ✔ | ✔ | ✔ |
- ✔ - 支持
- ✘ - 不支持
- ? - 不了解
- § - 支持但做得不好(有限制)
HiveMQ
HiveMQ是企业级的Broker,用Java编写,功能齐全,存在Github社区版版本。
- hivemq-community-edition【基于Java的开源MQTT代理,完全支持MQTT 3.x和MQTT5】
- hivemq-mqtt-client【MQTT3.1.1和MQTT5都支持,实现极高的吞吐量和低内存消耗】
- mqtt-cli【命令行界面】
支持特性
- MQTT 3.1 / 3.1.1 / 5.0
- 完整QoS支持
- 分布式集群支持
- 持久化支持
- 流量控制支持
- 完整连接方式支持
- IPv6支持
- 集群共享订阅
- $SYS统计信息主题
- JMX性能监控
- 日志打印
- Docker部署
- ……
说明
- 集群是基于Jgroups的,持久化的数据都是本地+Jgroups同步
- 订阅树也是完整的订阅树,优秀的缓存和并发访问控制,集群进行数据同步
- 多线程和并发等用的google的guava进行防御性编程
相关资料
ActiveMQ
Apache许可证下开源项目,官网地址。
支持特性
-
支持Java,C,C ++,C#,Ruby,Perl,Python,php 的各种
跨语言客户端和协议
-
在JMS客户端和Message Broker中完全支持企业集成模式
-
完全支持JMS 1.1和J2EE 1.4,并支持瞬时,持久性,事务性和XA消息传递
-
Spring支持,因此ActiveMQ可以轻松地嵌入到Spring应用程序中,并使用Spring的XML配置机制进行配置
-
在流行的J2EE服务器(例如TomEE,Geronimo,JBoss,GlassFish和WebLogic)中进行了测试
- 包括用于入站和出站消息传递的JCA 1.5资源适配器,以便ActiveMQ应该在任何符合J2EE 1.4的服务器中自动部署
-
使用JDBC和高性能日志支持非常快速的持久性
-
专为高性能集群,客户端-服务器,基于对等的通信而设计
-
REST API可为消息传递提供与技术无关和语言无关的基于Web的API
-
CXF和Axis支持,因此ActiveMQ可以轻松地放入这两个Web服务堆栈中,以提供可靠的消息传递
-
可用作内存JMS提供程序,非常适合单元测试JMS
相关资料
ActiveMQ Artemis
ActiveMQ的“下一代”,是支持MQTT的多协议消息代理。下一代高性能,非阻塞架构,基于事件驱动的消息系统。
支持特性
- 提供实现JMS 1.1 & 2.0 的客户端,包含JNDI
- 通过共享存储和网络复制提供高可用
- 简单&强大的协议无感知的寻址模型(addressing model)
- 灵活的集群用于分布式负载
- 基于日志的低延迟持久化
- 方便从ActiveMQ 5迁移
相关资料
RabbitMQ
RabbitMQ是AMQP消息代理,带有MQTT插件(从3.x版开始捆绑销售)。也可以使用公共测试服务器。功能受限。
Mosquitto
开源MQTT Server,可惜是C和C++的开源库。
Eclipse Mosquitto是实现MQTT协议版本5.0、3.1.1和3.1的开源消息代理(经EPL / EDL许可)。Mosquitto轻巧,适合在从低功耗单板计算机到完整服务器的所有设备上使用。
MQTT协议提供了使用发布/订阅模型执行消息传递的轻量级方法。这使其适用于物联网消息传递(例如,低功率传感器)或移动设备(例如电话,嵌入式计算机或微控制器)。
flespi
flespi是一项公开的,免费的,基于云的MQTT代理服务,具有声明的3.1、3.1.1、5.0协议合规性。高容量目标架构,隔离的MQTT名称空间,WebSockets / SSL支持,可配置的ACL,商业和免费的SLA,由HTTP REST API管理。
可惜是Node.js,python和Lua语言的开源。
Mosca
非java,官网。
VerneMQ
VerneMQ是高性能的分布式MQTT消息代理。它在商品硬件上水平和垂直扩展,以支持大量并发发布者和使用者,同时保持较低的延迟和容错能力。VerneMQ是用于IoT平台或智能产品的可靠消息中心。
VerneMQ实现了MQTT 3.1、3.1.1和5.0规范。
支持特性
- QoS 0,QoS 1,QoS 2
- 基本认证和授权
- 桥梁支撑
$ SYS
监视和报告树- TLS(SSL)加密
- Websockets支持
- 集群支持
- 日志记录(控制台,文件,系统日志)
- 向石墨报告
- 可扩展的插件架构
- 每个ClientId多个会话
- 会话平衡
- 共享订阅
- 消息负载调整
- 邮件减载(用于系统保护)
- 脱机消息存储(基于LevelDB)
- 队列可以处理消息FIFO或LIFO样式。
- MongoDB身份验证和集成
- Redis身份验证和集成
- mysql身份验证和集成
- PostgreSQL身份验证和集成
- Memcached整合
- HTTP整合
- HTTP Webhooks
- 代理协议v2
- 管理HTTP API(BETA)
- 实时MQTT会话跟踪
- 完全多租户
- 群集状态网页
相关资料
emqx
EMQ X是一个完全完全开放的平台,高度可扩展,高可用的分布式MQTT消息服务器,适用于IoT,M2M和移动应用程序,可处理千万等级的并发客户端。
从3.0版本开始,EMQ X完全支持MQTT V5.0协议规范,向下兼容MQTT V3.1和V3.1.1,并支持MQTT-SN,CoAP,LwM2M,WebSocket和STOMP等通信协议。EMQX 3.0单价可支持千万等级的MQTT并发连接。
相关资料
vertx-mqtt-broker
开源项目。
支持特性
- MQTT v3.1和v3.1.1支持
- 支持QoS 0、1和2消息
- 持久性和会话管理(cleanSession = false)
- 可插拔身份验证(通过vert.x verticle系统)
- OAuth 2.0和OpenID Connect 1.0身份验证
- JWT认证
- 多租户
- 通过WebSocket的MQTT
- 保留标志
- 通过TCP和Websocket的TLS支持
- 同一代理引擎中的多个tcp / websocket传输
- 经纪人到经纪人双向和桥接
相关资料
moquette
轻量级MQTT代理,官网在此。
相关资料
Jmqtt
由Java和Netty实现的MQTT代理,支持持久性和集群
支持特性
- 基于Java及Netty开发,插件化模式,高性能,高扩展性
- 支持mqtt协议qos0,qos1,qos2消息质量服务
- 支持mqtt协议cleansession,retain,will等消息服务
- 完整支持mqtt Topic匹配过滤
- 支持websocket协议
- 支持RocksDB进行数据本地存储,数据高可靠
相关资料
MqttWk
基于nutzboot+netty+redis+kafka的Java MQTT broker。
特征
- 参考MQTT3.1.1规范实现
- 完整的QoS服务质量等级实现
- 遗嘱消息, 保留消息及消息分发重试
- 心跳机制
- MQTT连接认证(可选择是否开启)
- SSL方式连接(可选择是否开启)
- 主题过滤(支持单主题订阅如
test_topic
/mqtt/test
--不能以/结尾, 通配符订阅#
/mqtt/#
--以#结尾) - Websocket支持(可选择是否开启)
- 集群功能(可选择是否开启)
- Kafka消息转发功能(可选择是否开启)
备注
主题有一些限制,不能以/结尾,不支持通配符订阅+
相关资料
参考文献
MQTT协议3.1.1规范
MQTT Broker的需求和各大Broker对比
以上是关于物联网之MQTT3.1.1和MQTT5协议 (20) MQTT 相关开源实现Server或Broker列表(会不断更新)的主要内容,如果未能解决你的问题,请参考以下文章
物联网之MQTT3.1.1和MQTT5协议 (15) DISCONNECT报文
物联网之MQTT3.1.1和MQTT5协议 (12) UNSUBACK 报文
物联网之MQTT3.1.1和MQTT5协议 (16) AUTH 报文
物联网之MQTT3.1.1和MQTT5协议 (21) MQTT系列博文总览