物联网之MQTT3.1.1和MQTT5协议 (20) MQTT 相关开源实现Server或Broker列表(会不断更新)

Posted YuYunTan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了物联网之MQTT3.1.1和MQTT5协议 (20) MQTT 相关开源实现Server或Broker列表(会不断更新)相关的知识,希望对你有一定的参考价值。

文章目录

前言

本次博文就MQTT实现进行描述,后续会陆续更新相关内容。

broker列表

整体比较(MQTT 官网提供)

ServerQoS 0QoS 1QoS 2authbridge$SYSSSLdynamic topicsclusterwebsocketsplugin system
2lemetry§
Jmqtt§§§
Apache ActiveMQ
Apache ActiveMQ Artemis
Bevywise IoT Platformrm
emitter§
emqttd
flespi
GnatMQ
HBMQTT
HiveMQ
IBM WIoTP Message Gateway
JoramMQ
Mongoose?????????
moquette???rm
mosca????
mosquitto§
MQTT.js§
MqttWk?
RabbitMQ???
RSMB?
Software AG Universal Messagingrm
Solace§
SwiftMQ
Trafero Tstack
VerneMQ
WebSphere MQ???
Broker开源语言连接方式QoS共享订阅持久化集群
mosquittoC/C++4种全部
hui6075/mosquittoC/C++4种全部
moquette0.10Java4种全部
moquette0.12Java4种全部§
EMQ2.0+Erlang4种全部
EMQ3.0+Erlang4种全部
EMQ PLUSErlang4种全部
Jmqtt1.1.0Java无SSL全部
MqttWkJava4种全部§§
HiveMQJava4种全部
  • ✔ - 支持
  • ✘ - 不支持
  • ? - 不了解
  • § - 支持但做得不好(有限制)

HiveMQ

HiveMQ是企业级的Broker,用Java编写,功能齐全,存在Github社区版版本。

支持特性

  • 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 的各种

    跨语言客户端和协议

    • 适用于Java,C,C ++,C#的高性能客户端的OpenWire
    • Stomp支持,因此可以轻松地用C,Ruby,Perl,Python,PHP,ActionScript / Flash,Smalltalk和ActiveMQ以及任何其他流行的Message Broker进行对话来编写客户端
    • AMQP v1.0支持
    • MQTT v3.1支持允许在IoT环境中进行连接。
  • 在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的服务器中自动部署
  • 支持可插拔的传输协议,例如VM,TCP,SSL,NIO,UDP,多播,JGroups和JXTA传输

  • 使用JDBC和高性能日志支持非常快速的持久性

  • 专为高性能集群,客户端-服务器,基于对等的通信而设计

  • REST API可为消息传递提供与技术无关和语言无关的基于Web的API

  • Ajax支持使用纯Dhtml对Web浏览器的Web流支持,从而允许Web浏览器成为消息传递结构的一部分

  • 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。

特征

  1. 参考MQTT3.1.1规范实现
  2. 完整的QoS服务质量等级实现
  3. 遗嘱消息, 保留消息及消息分发重试
  4. 心跳机制
  5. MQTT连接认证(可选择是否开启)
  6. SSL方式连接(可选择是否开启)
  7. 主题过滤(支持单主题订阅如 test_topic /mqtt/test --不能以/结尾, 通配符订阅 # /mqtt/# --以#结尾)
  8. Websocket支持(可选择是否开启)
  9. 集群功能(可选择是否开启)
  10. Kafka消息转发功能(可选择是否开启)

备注

主题有一些限制,不能以/结尾,不支持通配符订阅+

相关资料

参考文献

MQTT协议5.0规范

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系列博文总览

物联网之MQTT3.1.1和MQTT5协议 (14) PINGRESP报文

物联网之MQTT3.1.1和MQTT5协议 (18) 安全