EMQX 概览
EMQX 是一款开源的大规模分布式 MQTT 消息服务器,功能丰富,专为物联网和实时通信应用而设计。EMQX 5.0 单集群支持 MQTT 并发连接数高达 1 亿条,单服务器的传输与处理吞吐量可达每秒百万级 MQTT 消息,同时保证毫秒级的低时延。
EMQX 支持多种协议,包括 MQTT (3.1、3.1.1 和 5.0)、HTTP、QUIC 和 WebSocket 等,保证各种网络环境和硬件设备的可访问性。EMQX 还提供了全面的 SSL/TLS 功能支持,比如双向认证以及多种身份验证机制,为物联网设备和应用程序提供可靠和高效的通信基础设施。
内置基于 SQL 的规则引擎,EMQX 可以实时提取、过滤、丰富和转换物联网数据。此外,EMQX 采用了无主分布式架构,以确保高可用性和水平扩展性,并提供操作友好的用户体验和出色的可观测性。
EMQX 拥有来自 50 多个国家的 20,000 多家企业用户,连接全球超过 1 亿台物联网设备,服务企业数字化、实时化、智能化转型。
什么是 MQTT?
MQTT(Message Queuing Telemetry Transport)是一种轻量级、基于发布-订阅模式的消息传输协议,适用于资源受限的设备和低带宽、高延迟或不稳定的网络环境。它在物联网应用中广受欢迎,能够实现传感器、执行器和其它设备之间的高效通信。
为什么 MQTT 是适用于物联网的最佳协议?
MQTT 所具有的适用于物联网特定需求的特点和功能,使其成为物联网领域最佳的协议之一。它的主要特点包括:
- 轻量级物联网设备通常在处理能力、内存和能耗方面受到限制。MQTT 开销低、报文小的特点使其非常适合这些设备,因为它消耗更少的资源,即使在有限的能力下也能实现高效的通信。
- 可靠物联网网络常常面临高延迟或连接不稳定的情况。MQTT 支持多种 QoS 等级、会话感知和持久连接,即使在困难的条件下也能保证消息的可靠传递,使其非常适合物联网应用。
- 安全通信安全对于物联网网络至关重要,因为其经常涉及敏感数据的传输。为确保数据在传输过程中的机密性,MQTT 提供传输层安全(TLS)和安全套接层(SSL)加密功能。此外,MQTT 还通过用户名/密码凭证或客户端证书提供身份验证和授权机制,以保护网络及其资源的访问。
- 双向通信MQTT 的发布-订阅模式为设备之间提供了无缝的双向通信方式。客户端既可以向主题发布消息,也可以订阅接收特定主题上的消息,从而实现了物联网生态系统中的高效数据交换,而无需直接将设备耦合在一起。这种模式也简化了新设备的集成,同时保证了系统易于扩展。
- 连续、有状态的会话MQTT 提供了客户端与 Broker 之间保持有状态会话的能力,这使得系统即使在断开连接后也能记住订阅和未传递的消息。此外,客户端还可以在建立连接时指定一个保活间隔,这会促使 Broker 定期检查连接状态。如果连接中断,Broker 会储存未传递的消息(根据 QoS 级别确定),并在客户端重新连接时尝试传递它们。这个特性保证了通信的可靠性,降低了因间断性连接而导致数据丢失的风险。
- 大规模物联网设备支持物联网系统往往涉及大量设备,需要一种能够处理大规模部署的协议。MQTT 的轻量级特性、低带宽消耗和对资源的高效利用使其成为大规模物联网应用的理想选择。通过采用发布-订阅模式,MQTT 实现了发送者和接收者的解耦,从而有效地减少了网络流量和资源使用。此外,协议对不同 QoS 等级的支持使得消息传递可以根据需求进行定制,确保在各种场景下获得最佳的性能表现。
- 语言支持物联网系统包含使用各种编程语言开发的设备和应用。MQTT 具有广泛的语言支持,使其能够轻松与多个平台和技术进行集成,从而实现了物联网生态系统中的无缝通信和互操作性。您可以阅读我们的 MQTT 客户端编程系列文章,学习如何在 PHP、Node.js、Python、Golang、Node.js 等编程语言中使用 MQTT。
安装—前提条件
- 下载并安装Docker
- 安装Docker-Compose环境
操作步骤
拉取EMQX镜像
EMQX官方镜像
docker pull emqx/emqx:5.0.23
启动EMQX容器
docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:5.0.23
端口说明
端口号 | 说明 |
---|---|
1883 | MQTT通信端口,用于MQTT客户端连接和消息发布/订阅 |
18083 | EMQX在线管理界面 |
测试连接EMQX服务
- 登录
EMQX
的Web
页面,查看连接详情。
在浏览器地址栏输入:{EMQX服务器地址}:{port}
,访问EMQX
的Web
页面。
参数 | 说明 |
---|---|
EMQX服务器地址 | 部署EMQX服务器的地址 |
port | EMQX管理界面的端口号,通常为18083 |
用户名 | 初始为admin |
登录密码 | 初始为public |
在Clients页面查看客户端信息,若存在网络组件内配置的client id的客户端则说明连接成功。如下图所示:
使用MQTTX连接EMQX服务
- 填写参数后,点击右上角
Connect
。
连接参数说明
参数 | 说明 |
---|---|
Name | 连接名称,用于标识当前连接。 |
Client ID | 客户端标识符,用于在MQTT 代理和客户端之间标识一个MQTT 客户端。 |
Host | EMQX 服务的IPv4 地址。 |
Port | EMQX 服务的连接端口号。 |
Username | 连接EMQX 服务时使用的用户名,可不填。 |
Password | 连接EMQX 服务时使用的密码,可不填。 |
- 登录
EMQX
的Web
页面,查看连接详情。
在浏览器地址栏输入:{EMQX服务器地址}:{port}
,访问EMQX
的Web
页面。
参数 | 说明 |
---|---|
EMQX服务器地址 | 部署EMQX服务器的地址 |
port | EMQX管理界面的端口号,通常为18083 |
用户名 | 初始为admin |
登录密码 | 初始为public |
可以看到MQTTX
客户端已经连接上EMQX
服务。