物联网之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社区版版本。

支持特性

  • 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对比

发布了189 篇原创文章 · 获赞 675 · 访问量 31万+

猜你喜欢

转载自blog.csdn.net/YuYunTan/article/details/102519822
今日推荐