目录
一、EMQX 是什么
EMQX 作为一款开源且高性能的分布式 MQTT 消息中间件,在物联网领域占据着举足轻重的地位。它的主要职责是为设备之间搭建起快速、稳定的信息交互桥梁,实现实时通信。在智能家居场景中,家中的智能音箱、智能灯光、智能门锁等各类设备,都能通过 EMQX 进行高效的数据交互,让用户可以通过手机 APP 一站式控制所有智能设备。在工业物联网中,工厂里的传感器、执行器、控制器等大量设备产生的数据,也依靠 EMQX 进行可靠传输与分发,从而助力企业实现生产过程的智能化管理与监控。
EMQX 具备诸多显著优势。它基于 Erlang/OTP 开发,天生具有高并发特性,单机便能支持百万级别的设备连接。其分布式集群架构更是强大,不仅能够动态扩展节点,还具备卓越的高可用性和容错能力。当部分节点出现故障时,系统能够自动进行切换,确保数据传输的稳定性,就如同给整个物联网系统上了一份坚固的保险。在协议支持方面,EMQX 以 MQTT 协议为核心,同时还广泛支持 MQTT-SN、CoAP、HTTP、WebSocket 等多种协议,这使得它能够无缝对接各种不同类型的设备与系统,满足多样化的通信需求。此外,EMQX 还采用了插件化设计,用户可以根据实际业务场景,灵活选择认证授权、消息持久化、数据桥接等插件来扩展功能,极大地提升了系统的适配性。
二、下载 EMQX
2.1 访问 EMQX 官网
在浏览器的地址栏中,准确输入 EMQX 的官方网址:https://www.emqx.com/ 。这是获取 EMQX 官方资源的唯一可靠途径,能有效避免从非官方渠道下载可能导致的安全风险及版本不兼容问题。进入官网后,页面布局简洁明了,在导航栏中,通常能轻松找到 “下载” 相关的按钮或链接。一般来说,它会处于较为显眼的位置,可能标注为 “下载”“Download” 等字样,直接点击该链接,即可进入 EMQX 的下载页面。
2.2 选择合适版本
EMQX 针对不同的操作系统,提供了丰富多样的版本选择。若你使用的是 Windows 系统,在下载页面中,需找到适用于 Windows 的版本。需要注意的是,从 5.4.0 版本起,EMQX 不再支持 Windows 系统 ,如果你的系统是 Windows,建议选择 5.3.2 等较新版本的 Windows 安装包,文件格式通常为.zip。对于 Linux 系统,常见的有基于不同发行版(如 CentOS、Ubuntu 等)和不同架构(如 x86_64、ARM 等)的版本。比如在 CentOS 系统上,若服务器架构为 amd64,可选择 emqx - 4.4.4 - otp24.1.5 - 3 - el7 - amd64.zip 这类版本。在选择时,务必根据自己服务器的实际操作系统和硬件架构进行精准匹配,否则可能会导致安装失败或无法正常运行。若你使用的是 macOS 系统,同样在下载页面中找到对应的 macOS 版本,一般有适合 Intel 芯片和 Apple Silicon 芯片的不同版本,要根据自己 Mac 电脑的芯片类型正确选择。
2.3 开始下载
在确定好适合自己系统的 EMQX 版本后,点击相应版本的下载链接,浏览器会自动开始下载文件。下载过程的时长,取决于网络状况。若网络速度较快,可能只需短短几分钟;若网络较差,可能需要十几分钟甚至更长时间。下载完成后,需对下载的文件进行完整性和安全性检查。对于下载的.zip 文件,可通过计算文件的哈希值(如 MD5、SHA - 1 等),并与 EMQX 官网提供的对应版本哈希值进行比对,若两者一致,则说明文件完整且未被篡改。例如,在 Windows 系统中,可借助一些第三方工具(如 HashTab)来计算文件的哈希值。若在下载过程中遇到网络中断等问题导致下载失败,可以尝试刷新下载页面,重新点击下载链接。若多次尝试仍无法下载,建议检查网络连接是否正常,或者更换网络环境,如从 Wi-Fi 切换到移动数据网络,再进行下载。
三、使用 EMQX
3.1 安装 EMQX
3.1.1 Windows 系统安装
在 Windows 系统中安装 EMQX,首先要确保系统满足 EMQX 的最低要求,从 5.4.0 版本起,EMQX 不再支持 Windows 系统 ,若你的系统是 Windows,建议选择 5.3.2 等较新版本。将下载好的 emqx - 5.3.2 - windows - amd64.zip 压缩包解压到指定目录,解压目录需注意不能包含中文、空格或特殊字符,以免在后续操作中出现路径识别错误。进入解压后的目录,找到 bin 文件夹,在该文件夹地址栏输入 “cmd”,并按下回车键,即可打开命令提示符窗口。在命令提示符中,输入 “emqx.cmd install” 命令,该命令会将 EMQX 安装为系统服务,安装完成后,后续开机时 EMQX 服务便会自动启动。若你需要卸载 EMQX 服务,同样在命令提示符中输入 “emqx.cmd uninstall” 命令即可。
3.1.2 Linux 系统安装
在 Linux 系统上安装 EMQX,可采用多种方式,以基于 CentOS 系统的 ZIP 包安装为例,先使用 “wget” 命令从 EMQX 官网下载对应的安装包,如 “wget https://www.emqx.com/downloads/broker/4.4.4/emqx - 4.4.4 - otp24.1.5 - 3 - el7 - amd64.zip” 。下载完成后,执行 “unzip emqx - 4.4.4 - otp24.1.5 - 3 - el7 - amd64.zip” 命令解压安装包。解压后,进入解压目录,执行 “cd emqx” 命令进入 EMQX 目录。接着,运行 “./bin/emqx start” 命令即可启动 EMQX。若使用的是基于 Debian 或 Ubuntu 系统的 DEB 包安装方式,可先将下载的 DEB 包放置在合适目录,然后使用 “sudo dpkg -i emqx - x.x.x.deb” 命令进行安装(其中 “x.x.x” 为具体版本号)。安装完成后,同样可通过 “sudo systemctl start emqx” 命令启动 EMQX 服务。
3.1.3 macOS 系统安装
对于 macOS 系统,若你下载的是 ZIP 格式的安装包,下载完成后,双击解压该安装包,将解压后的 emqx 文件夹移动到你希望安装的目录。打开终端,使用 “cd” 命令进入 emqx 文件夹的 bin 目录,例如 “cd /Users/yourusername/Downloads/emqx/bin”(需将 “yourusername” 替换为你的用户名)。在 bin 目录下,执行 “./emqx start” 命令来启动 EMQX。若你使用的是 Homebrew 包管理器,在确保已安装 Homebrew 的前提下,直接在终端中输入 “brew install emqx” 命令,Homebrew 会自动下载并安装 EMQX 的最新版本,安装完成后,同样可通过 “emqx start” 命令启动服务。
3.2 启动与停止 EMQX
3.2.1 命令行方式
在 Windows 系统中,启动 EMQX 可在命令提示符中进入 EMQX 的 bin 目录,输入 “emqx.cmd start” 命令;停止 EMQX 则输入 “emqx.cmd stop” 命令。若想重启 EMQX,先执行停止命令,再执行启动命令即可,或者直接使用 “emqx.cmd restart” 命令。在 Linux 系统中,启动 EMQX 服务的命令为 “sudo systemctl start emqx”,停止服务的命令是 “sudo systemctl stop emqx”,重启服务则使用 “sudo systemctl restart emqx” 命令。例如在 CentOS 系统中,若要启动 EMQX 服务,打开终端,输入上述启动命令,系统会根据指令启动 EMQX 服务。在 macOS 系统中,进入 EMQX 的 bin 目录后,启动 EMQX 使用 “./emqx start” 命令,停止使用 “./emqx stop” 命令,重启使用 “./emqx restart” 命令。
3.2.2 服务管理方式
在 Windows 系统中,你可以通过 “服务” 窗口来管理 EMQX 服务。按下 “Win + R” 组合键,打开运行窗口,输入 “services.msc” 并回车,打开 “服务” 窗口。在服务列表中找到 “EMQX Broker” 服务,右键点击该服务,在弹出的菜单中,选择 “启动”“停止” 或 “重新启动” 选项,即可对 EMQX 服务进行相应操作。在 Linux 系统中,除了上述的 systemctl 命令外,还可以通过 “chkconfig” 命令来设置 EMQX 服务的开机自启和关闭等状态。例如,要设置 EMQX 服务开机自启,可使用 “sudo chkconfig emqx on” 命令;若要关闭开机自启,使用 “sudo chkconfig emqx off” 命令 。在 macOS 系统中,若你希望 EMQX 在开机时自动启动,可以将启动命令添加到 “登录项” 中。打开 “系统偏好设置”,点击 “用户与群组”,选择当前用户,点击 “登录项” 标签,点击左下角的 “+” 按钮,找到 EMQX 的启动脚本(位于 EMQX 安装目录的 bin 文件夹下),将其添加到登录项中,这样每次开机时,系统会自动执行该脚本启动 EMQX。
3.3 登录 EMQX 控制台
EMQX 控制台是管理和监控 EMQX 的重要工具,通过浏览器访问即可。在浏览器地址栏中输入 “http://localhost:18083”(若 EMQX 部署在远程服务器上,需将 “localhost” 替换为服务器的实际 IP 地址)。在登录页面,输入默认的用户名 “admin” 和密码 “public”。首次登录后,系统会强制要求修改默认密码,以增强安全性。在修改密码时,应遵循密码强度要求,设置包含字母、数字和特殊字符的复杂密码,且新密码不能与原密码相同。修改密码后,务必牢记新密码,以便后续登录使用。若忘记密码,在 Linux 系统中,可以通过命令行工具重置密码,如使用 “emqx_ctl admins passwd admin new_password” 命令(将 “new_password” 替换为新密码);在 Windows 系统中,同样可以在命令提示符中进入 EMQX 的 bin 目录,执行类似的重置密码命令来恢复访问权限 。
四、EMQX 配置
4.1 基本配置文件介绍
EMQX 的配置文件主要存放在安装目录下的 etc 文件夹中,其中 emqx.conf 是核心配置文件 。该文件采用了类似 INI 文件的格式,以 “键 = 值” 的形式进行配置。文件中包含了大量的配置项,通过合理设置这些配置项,可以对 EMQX 的各项功能和性能进行精准调控。例如,“node.name” 配置项用于指定 EMQX 节点的名称,在集群环境中,每个节点的名称必须唯一,以便节点之间能够准确识别和通信。“log.level” 配置项用于设置日志级别,可选项有 “debug”“info”“warn”“error” 等,不同的级别决定了系统记录日志的详细程度。若设置为 “debug” 级别,系统会记录大量详细的调试信息,有助于开发和故障排查,但可能会产生较多的日志文件,占用一定的磁盘空间;若设置为 “error” 级别,则仅记录系统运行过程中出现的错误信息,日志文件相对较小,适合在生产环境中使用,以减少系统资源消耗。
4.2 网络配置
在 emqx.conf 文件中,通过 “listeners.tcp.default” 配置项可设置 TCP 监听端口和绑定的 IP 地址。例如,将 “bind = 0.0.0.0:1883” 设置为 “bind = 192.168.1.100:1883”,表示 EMQX 将仅监听 192.168.1.100 这个 IP 地址的 1883 端口,这样可以增强网络访问的针对性和安全性,防止未授权的外部 IP 访问。对于 MQTT over SSL/TLS 连接,可通过 “listeners.ssl.external” 配置项来设置 SSL/TLS 监听端口,默认端口为 8883 。若要启用 WebSocket 协议,可配置 “listeners.ws.default” 相关项,如设置 “bind = 0.0.0.0:8083”,表示 EMQX 将在 8083 端口监听 WebSocket 连接请求,以满足不同设备通过 WebSocket 协议与 EMQX 进行通信的需求。
4.3 安全配置
为保障系统安全,首先要修改默认的用户名和密码。在 EMQX 中,可通过编辑 plugins 目录下的 emqx_auth_mnesia.conf 文件来实现。例如,添加 “auth.user.1.username = myuser”“auth.user.1.password = mypassword” 配置项,即可创建一个新的用户名为 “myuser”,密码为 “mypassword” 的用户。同时,务必在 emqx.conf 文件中设置 “allow_anonymous = false”,禁用匿名登录,防止未经认证的用户随意接入系统。
启用 SSL/TLS 加密是提升通信安全的重要手段。在配置 SSL/TLS 时,需准备好证书和密钥文件。若使用自签名证书,可通过 OpenSSL 工具生成。将生成的证书文件(如 cert.pem)和密钥文件(如 key.pem)放置在合适的目录(如 EMQX 安装目录下的 etc/certs 目录)。然后在 emqx.conf 文件中进行配置,设置 “listener.ssl.external.keyfile = etc/certs/key.pem”“listener.ssl.external.certfile = etc/certs/cert.pem”,指定证书和密钥文件的路径,同时设置 “listener.ssl.external = 8883”,启用 8883 端口的 SSL/TLS 监听。这样,客户端与 EMQX 之间的通信数据将通过 SSL/TLS 加密进行传输,有效防止数据被窃取和篡改 。
五、EMQX 调参优化
5.1 性能相关参数
在 EMQX 的性能优化中,最大连接数的设置至关重要。通过在 emqx.conf 文件中调整 “listeners.tcp.default.max_connections” 参数,可定义 EMQX 服务器允许的最大 TCP 连接数 。例如,将其设置为 100000,表示该服务器最多可同时处理 10 万个设备的连接请求。若设置过高,可能导致服务器资源耗尽,影响系统稳定性;设置过低,则无法充分发挥服务器性能,限制设备接入数量。
消息队列大小同样影响着系统性能。“mqtt.max_mqueue_len” 参数用于设置消息队列的最大长度 。假设将其设置为 5000,意味着当客户端与服务器之间的消息传输出现延迟或阻塞时,最多可缓存 5000 条消息。若消息产生速度远快于处理速度,且队列长度设置过小,消息可能会被丢弃,导致数据丢失;而设置过大,可能会占用过多内存资源。
5.2 资源限制参数
为防止 EMQX 对服务器资源的滥用,可通过设置资源限制参数来进行调控。在 emqx.conf 文件中,“node.process_limit” 参数用于限制 Erlang 虚拟机的进程数量。比如将其设置为 2000000,可有效防止因 EMQX 创建过多进程而耗尽系统资源,避免服务器出现卡顿甚至死机现象。
对于内存使用限制,可通过调整相关参数来实现。虽然 EMQX 没有单一的明确内存限制参数,但通过合理设置其他相关参数,如消息队列大小、缓存策略等,可以间接控制内存使用。例如,适当减小消息队列长度,可减少内存中缓存的消息数量,从而降低内存占用 。
5.3 参数调整策略
在不同的应用场景下,需要采用不同的参数调整策略。在物联网设备连接数量较少且数据流量较小的场景中,可保持 EMQX 的默认参数设置,这样既能满足基本需求,又能避免因过度调整参数而带来的配置复杂性。例如,在一个小型的智能家居系统中,仅有几十台设备连接,默认参数足以保证系统稳定运行。
而在大规模物联网项目中,如智慧城市、工业互联网等,设备连接数众多且数据流量巨大,此时就需要对参数进行精细调整。可以先进行小规模的性能测试,逐步增加连接数和数据流量,观察系统的资源使用情况和性能表现。根据测试结果,对最大连接数、消息队列大小、资源限制等参数进行优化。例如,在工业互联网场景中,可能需要将最大连接数设置为百万级别,并合理调整消息队列大小,以确保海量设备产生的数据能够被及时、稳定地处理 。
六、EMQX 代码实例
6.1 Java 连接 EMQX
在 Java 中,可借助 Eclipse Paho 库实现与 EMQX 的连接。首先,在项目中引入依赖:
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.2.5</version>
</dependency>
接着,通过如下代码实现连接与消息收发:
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
public class EMQXJavaExample {
public static void main(String[] args) {
String broker = "tcp://localhost:1883";
String clientId = "java-client-1";
String topic = "test-topic";
String message = "Hello, EMQX from Java!";
try {
// 创建MQTT客户端实例
MqttClient client = new MqttClient(broker, clientId, new MemoryPersistence());
// 配置连接选项
MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setCleanSession(true);
// 建立连接
client.connect(connOpts);
System.out.println("Connected to EMQX Broker");
// 发布消息
MqttMessage mqttMessage = new MqttMessage(message.getBytes());
mqttMessage.setQos(1);
client.publish(topic, mqttMessage);
System.out.println("Message published to topic: " + topic);
// 断开连接
client.disconnect();
System.out.println("Disconnected from EMQX Broker");
} catch (MqttException me) {
me.printStackTrace();
}
}
}
在上述代码中,先定义了 EMQX 服务器地址、客户端 ID、主题以及要发送的消息内容。随后创建MqttClient实例,并配置连接选项,设置为干净会话。成功连接到 EMQX 服务器后,创建MqttMessage实例,设置消息服务质量等级为 1,再将消息发布到指定主题。最后,断开与服务器的连接。
6.2 Python 连接 EMQX
在 Python 中,使用paho-mqtt库可实现与 EMQX 的交互。首先,安装paho-mqtt库,在命令行中执行:
pip install paho-mqtt
以下是连接 EMQX 并进行消息收发的代码示例:
import paho.mqtt.client as mqtt
# 连接成功回调函数
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("Connected to EMQX Broker!")
client.subscribe("test-topic")
else:
print(f"Failed to connect, return code: {rc}")
# 消息接收回调函数
def on_message(client, userdata, msg):
print(f"Received message on topic '{msg.topic}': {msg.payload.decode()}")
# 创建MQTT客户端实例
client = mqtt.Client()
# 设置回调函数
client.on_connect = on_connect
client.on_message = on_message
# 连接到EMQX服务器
broker_address = "localhost"
port = 1883
client.connect(broker_address, port)
# 启动循环以处理网络流量
client.loop_start()
try:
while True:
pass
except KeyboardInterrupt:
print("Exiting...")
client.loop_stop()
上述 Python 代码中,定义了on_connect回调函数,在连接成功时被调用,用于打印连接状态并订阅指定主题。on_message回调函数在接收到消息时被触发,用于打印接收到的消息内容。创建mqtt.Client实例后,设置连接和消息接收的回调函数,接着连接到本地的 EMQX 服务器,并启动循环以持续监听和处理网络消息,确保客户端能够实时接收服务器发布的消息 。
七、EMQX 高级用法
7.1 规则引擎
EMQX 的规则引擎堪称其强大功能的核心组件之一,它赋予用户对消息进行灵活处理的卓越能力。在实际应用中,消息过滤是规则引擎的常见用途。例如,在一个智能交通系统中,车辆传感器会持续上报大量数据,包括车速、油耗、行驶里程等 。但后端分析系统可能仅关注车速超过特定阈值(如 80 公里 / 小时)的数据。此时,可通过规则引擎创建如下规则:
SELECT * FROM "vehicle/sensor" WHERE payload.speed > 80
上述规则表示从 “vehicle/sensor” 主题中筛选出速度大于 80 的数据,实现了精准的消息过滤。
消息转发功能同样十分实用。以智能家居场景为例,当家中的温湿度传感器检测到室内温度过高(如超过 28 摄氏度)时,需要将相关告警消息转发到用户的手机 APP 上。通过规则引擎,可配置如下规则:
SELECT "High temperature alert: " + payload.temperature as alert_message
FROM "home/temperature"
WHERE payload.temperature > 28
然后,将此规则的动作设置为通过 HTTP 请求将 “alert_message” 发送到指定的手机 APP 后端接口,从而实现消息的及时转发,让用户能够第一时间了解家中的异常情况。
7.2 集群搭建
搭建 EMQX 集群能够显著提升系统的扩展性和可靠性。在开始搭建之前,需准备多台服务器,例如有三台服务器,其 IP 地址分别为 192.168.1.100、192.168.1.101、192.168.1.102 。
首先,在每台服务器上安装 EMQX,具体安装步骤可参考前文介绍。安装完成后,在每台服务器的 emqx.conf 配置文件中,修改节点名称,确保每个节点名称唯一且符合规范。例如,在 192.168.1.100 服务器上,将 “node.name” 设置为 “emqx@192.168.1.100” ;在 192.168.1.101 服务器上,设置为 “emqx@192.168.1.101” ;在 192.168.1.102 服务器上,设置为 “emqx@192.168.1.102” 。
接着,在集群模式配置方面,可选择静态集群模式或动态集群模式。以静态集群模式为例,在所有节点的 emqx.conf 文件中,设置 “cluster.discovery = static”,并指定集群种子节点,例如 “cluster.static.seeds = emqx@192.168.1.100,emqx@192.168.1.101,emqx@192.168.1.102” 。
完成配置后,依次启动每台服务器上的 EMQX 服务。启动命令为 “sudo systemctl start emqx” 。启动完成后,可通过 “emqx_ctl cluster status” 命令查看集群状态,确保所有节点都已成功加入集群 。在集群搭建过程中,要特别注意网络连通性,确保各节点之间能够正常通信。同时,每个节点的配置要保持一致,尤其是节点名称和集群相关配置,否则可能导致集群搭建失败 。
7.3 插件使用
EMQX 丰富的插件生态系统为用户提供了更多功能扩展的可能性。例如,emqx_auth_mnesia 插件是内置的基于 Mnesia 数据库的认证插件。若要启用该插件,首先在命令行中执行 “emqx_ctl plugins load emqx_auth_mnesia” 命令。启用后,可通过编辑 plugins 目录下的 emqx_auth_mnesia.conf 文件来配置用户认证信息。如添加 “auth.user.1.username = myuser”“auth.user.1.password = mypassword”,即可创建一个新用户,用于客户端连接时的身份认证 。
emqx_retainer 插件用于消息持久化存储。当客户端发布带有保留标志的消息时,该插件会将消息存储起来。当有新的客户端订阅该主题时,会立即收到这条保留消息。要启用该插件,同样在命令行执行 “emqx_ctl plugins load emqx_retainer” 命令。在实际使用中,可通过配置文件调整消息的存储策略,如设置存储路径、限制存储消息的数量等 。
emqx_web_hook 插件允许将 EMQX 的事件(如客户端连接、断开连接、消息发布等)发送到外部的 Web 服务进行处理。启用该插件后,在配置文件中指定外部 Web 服务的 URL 和相关参数,当事件发生时,EMQX 会向指定的 URL 发送 HTTP 请求,将事件信息传递给外部服务,以便进行更灵活的业务逻辑处理 。在选择插件时,需根据实际业务需求进行判断。如果需要增强认证功能,可选择相应的认证插件;若有数据持久化需求,则选择合适的持久化插件。同时,在启用插件后,要密切关注系统性能,确保插件的运行不会对 EMQX 的整体性能产生负面影响 。
八、搭建 EMQX 服务器
8.1 服务器环境准备
在搭建 EMQX 服务器前,要确保服务器具备良好的硬件基础。推荐使用至少具有 4 核 CPU 的服务器,以保障在处理大量设备连接请求和消息转发时,能够具备足够的计算能力,避免因 CPU 资源不足导致处理延迟。内存方面,建议配置 8GB 及以上,充足的内存可用于缓存消息、维持连接状态等,有效提升系统的整体性能。磁盘空间上,50GB 以上的可用空间是较为理想的,这不仅能满足 EMQX 本身的安装需求,还能为后续可能产生的大量日志文件、数据存储等提供充足的空间。
从软件环境来看,EMQX 对多种操作系统提供了支持,包括常见的 Linux 发行版(如 CentOS、Ubuntu 等)、Windows Server 系统以及 macOS 。但在生产环境中,更推荐使用 Linux 系统,如 CentOS 7 及以上版本,其稳定性和性能表现更为出色。同时,要确保服务器能够稳定连接外网,因为在安装过程中,可能需要从官方网站下载相关的依赖包和更新文件。若服务器无法连接外网,需提前下载并导入所需的依赖包,以保证安装的顺利进行。另外,服务器的防火墙设置也至关重要。在安装 EMQX 之前,需根据实际需求,合理配置防火墙规则,开放 EMQX 运行所需的端口,如 MQTT 协议默认的 1883 端口、用于 Web 管理控制台的 18083 端口等,确保外部设备能够正常访问 EMQX 服务器 。
8.2 安装与配置步骤
在 Linux 系统(以 CentOS 为例)中安装 EMQX,可采用二进制包安装方式。从 EMQX 官网(EMQX: The #1 MQTT Platform for IoT, IIoT and Connected Cars )下载适合 CentOS 系统的二进制安装包,如 emqx - 4.4.4 - otp24.1.5 - 3 - el7 - amd64.rpm 。下载完成后,在服务器终端中,使用 “rpm -ivh emqx - 4.4.4 - otp24.1.5 - 3 - el7 - amd64.rpm” 命令进行安装。安装过程中,系统会自动处理依赖关系,并将 EMQX 安装到指定目录。
安装完成后,需要对 EMQX 进行配置。进入 EMQX 的安装目录下的 etc 文件夹,找到 emqx.conf 配置文件。在该文件中,可对 EMQX 的基本参数进行设置。例如,修改 “node.name” 参数,将其设置为一个具有明确标识性且唯一的节点名称,如 “emqx@yourserverip”,其中 “yourserverip” 为服务器的实际 IP 地址,这有助于在集群环境中准确识别节点。对于网络相关配置,若要指定 EMQX 监听的 IP 地址和端口,可设置 “listeners.tcp.default.bind = yourserverip:1883”,将 “yourserverip” 替换为服务器实际 IP 地址,确保 EMQX 仅监听指定 IP 的 1883 端口,增强网络安全性。
配置完成后,使用 “sudo systemctl start emqx” 命令启动 EMQX 服务。启动后,可通过 “sudo systemctl status emqx” 命令查看服务状态,若显示 “active (running)”,则表明 EMQX 服务已成功启动 。此时,在浏览器中输入 “http://yourserverip:18083”(将 “yourserverip” 替换为服务器实际 IP 地址),即可访问 EMQX 的 Web 管理控制台,使用默认用户名 “admin” 和密码 “public” 登录后,便可对 EMQX 进行全面管理和监控 。
8.3 服务器优化
为提升 EMQX 服务器的运行效率,可从多个方面进行优化。在操作系统层面,调整系统参数是关键。以 Linux 系统为例,可通过修改 “/etc/sysctl.conf” 文件来优化系统对文件句柄的管理。增加 “fs.file - max = 65536” 配置,将系统允许打开的最大文件句柄数提升至 65536,以满足 EMQX 在处理大量连接和消息时对文件资源的需求。同时,设置 “net.core.somaxconn = 32768”,增大 TCP 连接请求队列的最大长度,确保在高并发情况下,服务器能够有效处理新的连接请求,减少连接丢失的情况 。
在 EMQX 自身配置方面,合理调整连接相关参数能显著提升性能。在 emqx.conf 文件中,根据实际业务需求,适当增加 “listeners.tcp.default.max_connections” 参数的值,如设置为 1000000,以允许更多设备同时连接到 EMQX 服务器。但需注意,设置过高可能会导致服务器资源耗尽,需结合服务器硬件资源进行合理评估。此外,优化消息队列参数也很重要。调整 “mqtt.max_mqueue_len” 参数,例如设置为 10000,可控制每个客户端的消息队列长度,避免因消息队列过长占用过多内存资源,同时确保在网络波动等情况下,消息能够得到合理缓存和处理 。
在服务器资源监控方面,可借助工具如 Prometheus 和 Grafana 搭建监控系统。Prometheus 能够定期采集 EMQX 服务器的各项指标数据,如 CPU 使用率、内存使用量、连接数、消息收发速率等。Grafana 则用于将这些采集到的数据以直观的图表形式展示出来,通过设置告警阈值,当服务器资源使用达到或超过设定的阈值时,系统能够及时发出告警通知,以便管理员及时采取措施进行调整,确保 EMQX 服务器始终处于稳定、高效的运行状态 。