1.ä»ä¹å«EMQ
2.MQTT Broker 选型
3.什么叫EMQ?
4.什么叫EMQ
5.EMQX-简介、安装部署、基础功能、python代码测试
6.ä»ä¹å«EMQï¼
ä»ä¹å«EMQ
EMQæ¯åºäºé«å¹¶åçErlang/OTPè¯è¨å¹³å°è®¾è®¡ï¼æ¯æç¾ä¸çº§è¿æ¥ååå¸å¼é群ï¼åå¸è®¢é 模å¼çå¼æºMQTTæ¶æ¯æå¡å¨å®æ´æ¯æMQTT V3.1/V3.1.1åè®®è§èï¼æ©å±æ¯æWebSocketãStompãCoAPãMQTT-SNæç§æTCPåè®®
å®å ¨å¼æ¾æºç
åºäºApache Version 2.0å¼æºåè®®
ç¾ä¸çº§å¹¶åè¿æ¥
åèç¹ä¸å¹¶åMQTTè¿æ¥å³°å¼è´è½½
å®æ´MQTTåè®®æ¯æ
MQTT V3.1.1åè®®è§èQoS0/1/2æ¶æ¯æ¯æ
ç®ä¾¿å®è£ é¨ç½²
跨平å°é¨ç½²å¨LinuxãFreeBSDãMac OS XæWindowsæå¡å¨
åå¸å¼é群ææ¡¥æ¥
åèç¹è´è½½åè¡¡æå¤èç¹åå¸å¼é群
æ©å±æ¨¡åä¸æ件
LDAP, MySQL, PostgreSQL, Redis, MongoDBæ©å±æ件éæ
EMQ! ç»åç»åç»åï¼
MQTT Broker 选型
MQTT Broker选型 在构建分布式系统时,选择合适的MQTT Broker至关重要,它负责接收发布者发布的recast源码解析消息并将其分发给不同的订阅者。市面上有许多MQTT Broker可供选择,以下是一些常用选项的对比与分析。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版本,并在性能上做了优化。然而,android talkback源码开源版本不支持服务器内部消息持久化,这是其一个显著限制。HiveMQ
HiveMQ是一款企业级MQTT Broker,使用Java编写,功能丰富,支持MQTT 3.1、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。mui demo源码Moquette
Moquette是一个功能齐全的Java编写的开源MQTT Broker,提供完整的QoS服务和认证方式,支持多种持久化存储。然而,0.版本中存在内存泄漏问题,官方修复后发布为irubant/moquette。其集群功能仅使用Hazelcast作为消息总线,不支持共享订阅。 综上所述,选择合适的MQTT Broker需考虑应用的具体需求,包括连接数量、协议版本、性能要求、集群支持、消息持久化、安全认证等因素。在选择时,应充分评估各Broker的特性和限制,以满足实际应用场景的需要。什么叫EMQ?
EMQ是一款专为高并发场景设计的消息服务器,它基于Erlang/OTP语言平台,具有出色的性能,支持百万级别的连接。作为开源MQTT消息服务器,它严格遵循MQTT V3.1/V3.1.1协议规范,并扩展支持WebSocket、Stomp、CoAP、MQTT-SN和私有TCP协议。EMQ的核心是其完全开放的源代码,遵循Apache Version 2.0协议,使得它在并发处理方面表现出色,单节点可承受高达万的MQTT并发连接,能轻松应对高峰期的负载压力。
安装部署简便,EMQ适用于多种操作系统,openfire 源码安装包括Linux、FreeBSD、Mac OS X和Windows,使其具有广泛的适应性。它不仅支持单节点运行,还可以通过分布式集群或桥接实现高可用性和负载均衡。对于多节点集群,EMQ提供了扩展模块和插件的支持,如LDAP、MySQL、PostgreSQL、Redis和MongoDB,这使得它能够无缝集成到各种企业级架构中。
总的来说,EMQ是一款功能强大、灵活易用、可扩展的开源消息服务器,能满足大规模并发需求,并为用户提供丰富的协议支持和扩展选项,是构建高效消息系统的重要选择。
什么叫EMQ
EMQ是一个高性能的开源消息服务器,专为高并发场景设计,它基于Erlang/OTP语言平台构建,支持百万级的连接并具备分布式集群功能。该服务器采用MQTT V3.1/V3.1.1协议,兼容WebSocket、Stomp、CoAP、MQTT-SN等协议,确保了协议的全面支持。
EMQ的源代码完全开放,遵循Apache Version 2.0协议,能够承受百万级的并发连接,单节点可达到万连接的峰值负载,支持QoS0/1/2等级的消息处理,确保消息的魂斗罗java源码可靠传递。
部署方面,EMQ易于安装和在多种平台上运行,包括Linux、FreeBSD、Mac OS X和Windows,使得它能够灵活适应各种服务器环境。此外,它还支持分布式集群和桥接,如双节点负载均衡或多节点分布式部署,以提高系统的扩展性和容错性。
为了进一步扩展功能,EMQ集成了诸如LDAP、MySQL、PostgreSQL等数据库的扩展模块和插件,如Redis和MongoDB,这使得它能够无缝集成到各种业务场景中,满足不同用户的需求。
总的来说,EMQ是一个强大且灵活的消息处理解决方案,适用于对连接数、协议兼容性和可扩展性有高要求的应用环境。它的开放性和易用性使其在众多MQTT服务器中脱颖而出。
EMQX-简介、安装部署、基础功能、python代码测试
MQTT属于是物联网的通信协议,在MQTT协议中有两大角色:客户端(发布者/订阅者),服务端(Mqtt broker);针对客户端和服务端需要有遵循该协议的的具体实现,EMQ/EMQX就是MQTT Broker的一种实现。
EMQX是基于 Erlang/OTP 平台开发的 MQTT 消息服务器,是开源社区中最流行的 MQTT 消息服务器。EMQ X 是开源百万级分布式 MQTT 消息服务器(MQTT Messaging Broker),用于支持各种接入标准 MQTT协议的设备,实现从设备端到服务器端的消息传递,以及从服务器端到设备端的设备控制消息转发。从而实现物联网设备的数据采集,和对设备的操作和控制。
到目前为止,比较流行的 MQTT Broker 有几个:使用 C 语言实现的 MQTT Broker,使用 Erlang 语言开发的 MQTT Broker,使用 Node.JS 开发的 MQTT Broker,同样使用 Erlang 开发的 MQTT Broker。从支持 MQTT5.0、稳定性、扩展性、集群能力等方面考虑,EMQX 的表现应该是最好的。
与别的MQTT服务器相比EMQ X 主要有以下的特点:经过+版本的迭代,EMQ X 目前为开源社区中最流行的 MQTT 消息中间件,在各种客户严格的生产环境上经受了严苛的考验;支持丰富的物联网协议,包括 MQTT、MQTT-SN、CoAP、 LwM2M、LoRaWAN 和 WebSocket等;优化的架构设计,支持超大规模的设备连接。企业版单机能支持百万的 MQTT 连接;集群能支持千万级别的 MQTT 连接;易于安装和使用;灵活的扩展性,支持企业的一些定制场景;中国本地的技术支持服务,通过微信、QQ等线上渠道快速响应客户需求;基于 Apache 2.0 协议许可,完全开源。EMQ X 的代码都放在 Github 中,用户可以查看所有源代码;EMQ X 3.0 支持 MQTT 5.0 协议,是开源社区中第一个支持 5.0协议规范的消息服务器,并且完全兼容 MQTT V3.1 和 V3.1.1 协议。除了 MQTT 协议之外,EMQ X 还支持别的一些物联网协议;单机支持百万连接,集群支持千万级连接;毫秒级消息转发。EMQ X 中应用了多种技术以实现上述功能;利用 Erlang/OTP 平台的软实时、高并发和容错(电信领域久经考验的语言);全异步架构;连接、会话、路由、集群的分层设计;消息平面和控制平面的分离等;扩展模块和插件,EMQ X 提供了灵活的扩展机制,可以实现私有协议、认证鉴权、数据持久化、桥接发和管理控制台等的扩展;桥接:EMQ X 可以跟别的消息系统进行对接,比如 EMQ X Enterprise 版本中可以支持将消息转发到 Kafka、RabbitMQ 或者别的 EMQ 节点等;共享订阅:共享订阅支持通过负载均衡的方式在多个订阅者之间来分发 MQTT 消息。比如针对物联网等 数据采集场景,会有比较多的设备在发送数据,通过共享订阅的方式可以在订阅端设置多个订阅者来实现这几个订阅者之间的工作负载均衡。
典型的物联网平台包括设备硬件、数据采集、数据存储、分析、Web / 移动应用等。EMQX 位于数据采集这一层,分别与硬件和数据存储、分析进行交互,是物联网平台的核心:前端的硬件通过 MQTT 协议与位于数据采集层的 EMQX 交互,通过 EMQX 将数据采集后,通过 EMQX 提供的数据接口,将数据保存到后台的持久化平台中(各种关系型数据库和 NOSQL 数据库),或者流式数据处理框架等,上层应用通过这些数据分析后得到的结果呈现给最终用户。
EMQX 公司主要提供三个产品,可在官网首页产品导航查看每一种产品;主要体现在支持的连接数量、产品功能和商业服务等方面的区别。
完整的 MQTT V3.1/V3.1.1 及 V5.0 协议规范支持;QoS0, QoS1, QoS2 消息支持;持久会话与离线消息支持;Retained 消息支持;Last Will 消息支持;TCP/SSL 连接支持;MQTT/WebSocket/SSL 支持;HTTP 消息发布接口支持;$SYS/# 系统主题支持;客户端在线状态查询与订阅支持;客户端 ID 或 IP 地址认证支持;用户名密码认证支持;LDAP 认证;Redis、MySQL、PostgreSQL、MongoDB、HTTP 认证集成;浏览器 Cookie 认证;基于客户端 ID、IP 地址、用户名的访问控制 (ACL);多服务器节点集群 (Cluster);支持 manual、mcast、dns、etcd、k8s 等多种集群发现方式;网络分区自动愈合;消息速率限制;连接速率限制;按分区配置节点;多服务器节点桥接 (Bridge);MQTT Broker 桥接支持;Stomp 协议支持;MQTT-SN 协议支持;CoAP 协议支持;Stomp/SockJS 支持;延时 Publish ($delay/topic);Flapping 检测;黑名单支持;共享订阅 ($share/:group/topic);TLS/PSK 支持;规则引擎;空动作 (调试);消息重新发布;桥接数据到 MQTT Broker;检查 (调试);发送数据到 Web 服务。
EMQ X 目前支持的操作系统:Centos6、Centos7、OpenSUSE tumbleweed、Debian 8、Debian 9、Debian 、Ubuntu .、Ubuntu .、Ubuntu .、macOS .、macOS .、macOS .、Windows Server 。产品部署建议 Linux 服务器,不推荐 Windows 服务器。安装的方式有很多种,可供自由选择:Shell脚本安装、包管理器安装、二进制包安装、ZIP压缩包安装、Homebrew安装、Docker运行安装、Helm安装、源码编译安装。
Dashboard界面查看基本信息。
身份认证是大多数应用的重要组成部分,MQTT 协议支持用户名密码认证,启用身份认证能有效阻止非法客户端的连接。EMQ X 中的认证指的是当一个客户端连接到 EMQ X 的时候,通过服务器端的配置来控制客户端连接服务器的权限。EMQ X 的认证支持包括两个层面:MQTT 协议本身在 CONNECT 报文中指定用户名和密码,EMQ X 以插件形式支持基于 Username、ClientID、HTTP、JWT、LDAP 及各类数据库如 MongoDB、MySQL、PostgreSQL、Redis 等多种形式的认证;在传输层上,TLS 可以保证使用客户端证书的客户端到服务器的身份验证,并确保服务器向客户端验证服务器证书。也支持基于 PSK 的 TLS/DTLS 认证。
EMQ X 支持使用内置数据源(文件、内置数据库)、JWT、外部主流数据库和自定义 HTTP API 作为身份认证数据源。连接数据源、进行认证逻辑通过插件实现的,每个插件对应一种认证方式,使用前需要启用相应的插件。客户端连接时插件通过检查其 username/clientid 和 password 是否与指定数据源的信息一致来实现对客户端的身份认证。(v5.0以上默认集成)EMQ X 支持的认证方式:内置数据源、外部数据库、其他。认证结果:认证成功、认证失败、忽略认证(ignore)。
EMQ X 默认配置中启用了匿名认证,任何客户端都能接入 EMQ X。没有启用认证插件或认证插件没有显式允许/拒绝(ignore)连接请求时,EMQ X 将根据匿名认证启用情况决定是否允许客户端连接。
可以订阅多个主题。
安装 paho-mqtt:导入 Paho MQTT 客户端。
通过TCP连接:设置 broker、port、topic、client_id,连接 MQTT Broker。
通过SSL/TLS连接:设置 broker、port、topic、client_id,连接 MQTT Broker,使用 CA certificate,设置用户名密码。
订阅主题:设置 on_message 回调函数,当收到消息时执行。
取消订阅:通过以下代码取消订阅,此时应指定取消订阅的主题。
发布消息:通过以下代码发布消息,设置消息内容、主题,调用 publish 方法。
接收消息:通过以下代码指定客户端对消息事件进行监听,并在收到消息后执行回调函数,将接收到的消息及其主题打印到控制台。
断开连接:如客户端希望主动断开连接,可以通过如下代码实现。
完整代码:导入 random、time、paho.mqtt.client as mqtt_client,设置 broker、port、topic、client_id,连接 MQTT Broker,设置 on_connect 回调函数,设置 publish 回调函数,运行客户端。
ä»ä¹å«EMQï¼
EMQæ¯åºäºé«å¹¶åçErlang/OTPè¯è¨å¹³å°è®¾è®¡ï¼æ¯æç¾ä¸çº§è¿æ¥ååå¸å¼é群ï¼åå¸è®¢é 模å¼çå¼æºMQTTæ¶æ¯æå¡å¨
å®æ´æ¯æMQTT V3.1/V3.1.1åè®®è§èï¼æ©å±æ¯æWebSocketãStompãCoAPãMQTT-SNæç§æTCPåè®®
å®å ¨å¼æ¾æºç
åºäºApache Version 2.0å¼æºåè®®
ç¾ä¸çº§å¹¶åè¿æ¥
åèç¹ä¸å¹¶åMQTTè¿æ¥å³°å¼è´è½½
å®æ´MQTTåè®®æ¯æ
MQTT V3.1.1åè®®è§èQoS0/1/2æ¶æ¯æ¯æ
ç®ä¾¿å®è£ é¨ç½²
跨平å°é¨ç½²å¨LinuxãFreeBSDãMac OS XæWindowsæå¡å¨
åå¸å¼é群ææ¡¥æ¥
åèç¹è´è½½åè¡¡æå¤èç¹åå¸å¼é群
æ©å±æ¨¡åä¸æ件
LDAP, MySQL, PostgreSQL, Redis, MongoDBæ©å±æ件éæ
EMQ! ç»åç»åç»åï¼