开源 Linux 服务器与中间件(十)Mqtt协议和Emqx服务器安装测试
文章的目的记录所使用的的Linux服务器和中间件的配置和使用,防止时间太长忘记,进行重复工作。
相关链接:
开源 Linux 服务器与中间件(一)基本介绍
开源 Linux 服务器与中间件(二)嵌入式Linux服务器和中间件
开源 Linux 服务器与中间件(三)服务器--Nginx
开源 Linux 服务器与中间件(四)服务器--Tomcat
开源 Linux 服务器与中间件(五)服务器--Boa
开源 Linux 服务器与中间件(六)服务器--Lighttpd
开源 Linux 服务器与中间件(七)数据库--MySQL
开源 Linux 服务器与中间件(八)数据库--MariaDB
开源 Linux 服务器与中间件(九)数据库--SQLite3
开源 Linux 服务器与中间件(十)Mqtt协议和Emqx服务器安装测试
开源 Linux 服务器与中间件(十一)Emqx服务器消息的订阅和发送(mqtt测试)
推荐链接:
linux C 语言开发 (一) Window下用gcc编译和gdb调试
linux C 语言开发 (二) VsCode远程开发 linux
linux C 语言开发 (三) 建立云服务器
linux C 语言开发 (四) linux系统常用命令
linux C 语言开发 (五) linux系统目录结构
linux C 语言开发 (六) 程序的编辑和编译(vim、gcc)
linux C 语言开发 (七) 文件 IO 和标准 IO
linux C 语言开发 (八) 进程基础
linux C 语言开发 (九) 进程间通讯--管道
linux C 语言开发 (十) 进程间通讯--信号
linux C 语言开发 (十一) 进程间通讯--共享内存
linux C 语言开发 (十二) 进程间通讯--消息队列
Linux C到Android App开发推荐链接(入门十二章):
开源 java android app 开发(一)开发环境的搭建_csdn 开源 java android app-CSDN博客
开源 java android app 开发(一)开发环境的搭建-CSDN博客
开源 java android app 开发(二)工程文件结构-CSDN博客
开源 java android app 开发(三)GUI界面布局和常用组件-CSDN博客
开源 java android app 开发(四)GUI界面重要组件-CSDN博客
开源 java android app 开发(五)文件和数据库存储-CSDN博客
开源 java android app 开发(六)多媒体使用-CSDN博客
开源 java android app 开发(七)通讯之Tcp和Http-CSDN博客
开源 java android app 开发(八)通讯之Mqtt和Ble-CSDN博客
开源 java android app 开发(九)后台之线程和服务-CSDN博客
开源 java android app 开发(十)广播机制-CSDN博客
开源 java android app 开发(十一)调试、发布-CSDN博客
开源 java android app 开发(十二)封库.aar-CSDN博客
linux C到.net mvc开发推荐链接:
开源C# .net mvc 开发(一)WEB搭建_c#部署web程序-CSDN博客
开源 C# .net mvc 开发(二)网站快速搭建_c#网站开发-CSDN博客
开源 C# .net mvc 开发(三)WEB内外网访问(VS发布、IIS配置网站、花生壳外网穿刺访问)_c# mvc 域名下不可訪問內網,內網下可以訪問域名-CSDN博客
开源 C# .net mvc 开发(四)工程结构、页面提交以及显示_c#工程结构-CSDN博客
开源 C# .net mvc 开发(五)常用代码快速开发_c# mvc开发-CSDN博客、
内容:Mqtt协议的功能和用途,Emqx服务器的功能和应用。
目录
1.Mqtt协议的功能和用途
2.Emqx服务器的功能和应用
3.Emqx服务器的安装,测试。
一、Mqtt协议的功能和用途
MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅模式的消息传输协议,专门为低带宽、高延迟或不稳定的网络环境设计。
📋 MQTT核心功能特性
1. 发布/订阅模式
-
解耦通信:消息发布者和订阅者不需要知道彼此的存在
-
一对多通信:单个发布者可以向多个订阅者广播消息
-
主题过滤:通过主题层级结构实现灵活的消息路由
2. 三种服务质量等级
# MQTT QoS级别 QoS_0 = 0 # 最多交付一次(可能丢失) QoS_1 = 1 # 至少交付一次(可能重复) QoS_2 = 2 # 恰好交付一次(最可靠)
3. 持久会话与离线消息
-
Clean Session:清除之前的订阅状态
-
持久化会话:服务器保存客户端的订阅信息和离线消息
-
遗嘱消息:客户端异常断开时自动发送预设消息
4. 轻量级设计
-
最小化协议头:仅2字节固定头部
-
减少网络开销:适合带宽受限环境
-
低功耗:适合电池供电设备
🎯 MQTT主要应用场景
1. 🌍 物联网应用
智能家居
应用示例:- 智能灯光控制:topic: "home/living-room/light/switch"- 温度监控:topic: "home/bedroom/temperature"- 安防报警:topic: "home/security/door-sensor"- 家电控制:topic: "home/kitchen/appliance/status"
优势:
-
设备资源消耗低
-
支持大量并发连接
-
网络波动适应性强
工业物联网
典型应用:- 设备遥测:topic: "factory/line1/machineA/telemetry"- 预测性维护:topic: "plant/sensor/vibration/alert"- 远程控制:topic: "remote/valve/control"- 数据采集:topic: "sensor/temperature/#"
2. 🚗 车联网与智能交通
实时车辆监控
据发布示例 topics = { "gps": "fleet/vehicle001/gps", "speed": "fleet/vehicle001/speed", "fuel": "fleet/vehicle001/fuel", "diagnostic": "fleet/vehicle001/diagnostic" }
应用场景:
-
车队管理系统
-
实时位置跟踪
-
车辆状态监控
-
远程诊断和维护
3. 💻 移动应用与即时通讯
聊天应用
// 聊天室主题设计
const chatTopics = {userStatus: 'chat/room1/user/status',messages: 'chat/room1/messages',typing: 'chat/room1/typing'
};
推送通知
-
新闻推送
-
社交网络更新
-
实时游戏状态同步
4. 🏥 医疗健康领域
远程患者监护
医疗设备主题:- 生命体征: "patient/room101/vitals/heart_rate"- 设备状态: "medical/device/infusion-pump/status"- 紧急警报: "hospital/emergency/cardiac-alert"- 位置跟踪: "staff/doctor001/location"
优势:
-
实时数据传输
-
低延迟告警
-
可靠的连接保证
5. 🌱 农业与环境监测
智慧农业
# 农业传感器主题 agriculture_topics = ["farm/section1/soil/moisture","greenhouse/temperature", "weather/wind-speed","irrigation/valve/control" ]
6. 🔋 能源管理
智能电网
能源管理应用:- 智能电表: "smartgrid/meter/consumption"- 太阳能监控: "solar/panel/output"- 负载平衡: "grid/load/balancing"- 电价信息: "energy/pricing/real-time"
⚡ MQTT与其他协议的对比
| 特性 | MQTT | HTTP | CoAP |
|---|---|---|---|
| 协议模式 | 发布/订阅 | 请求/响应 | 请求/响应 |
| 头部大小 | 2字节 | 100+字节 | 4字节 |
| 功耗 | 极低 | 高 | 极低 |
| 可靠性 | 高 | 中等 | 高 |
| 实时性 | 优秀 | 一般 | 优秀 |
🔧 MQTT服务器选择
主流MQTT Broker
-
EMQX - 高并发,企业级功能丰富
-
Mosquitto - 轻量级,适合资源受限环境
-
HiveMQ - 商业版,企业级特性
-
AWS IoT Core - 云服务,免运维
💡 选择MQTT的考量因素
适合使用MQTT的场景:
✅ 设备到云端的通信
✅ 网络条件不稳定的环境
✅ 大量设备需要同时连接
✅ 实时性要求高的应用
✅ 设备资源受限(功耗、计算、存储)
不适合使用MQTT的场景:
❌ 点对点请求/响应模式
❌ 需要复杂查询的场景
❌ 大数据批量传输
❌ 已有成熟HTTP/REST架构的系统
📊 成功案例参考
实际应用
-
Facebook Messenger - 早期版本使用MQTT进行消息传递
-
AWS IoT - 基于MQTT协议的物联网平台
-
宝马ConnectedDrive - 车辆远程信息服务
-
阿里巴巴IoT平台 - 大规模设备连接管理
二、Emqx服务器的功能和应用
EMQX 是一款高性能的分布式物联网 MQTT 消息服务器,致力于为物联网设备提供可靠的实时消息传输和设备连接解决方案-1。它凭借其强大的功能,在全球拥有众多企业用户,并连接了超过1亿台物联网设备-1。
下面这个表格汇总了EMQX的核心功能及其典型应用场景,帮助你快速了解:
| 核心功能 💡 | 应用场景 🎯 |
|---|---|
| 海量设备连接与多协议接入-1 | 智能家居-2 |
| 高可靠消息路由与低延迟传输-1 | 车联网-2 |
| 强大的规则引擎与数据集成-1 | 工业物联网-5 |
| 安全保障与访问控制-1 | 实时网页应用-6 |
| 管理与监控运维-1 | AI大模型数据流-6 |
🔧 EMQX核心功能详解
-
海量连接与多协议支持:EMQX 单节点支持500万 MQTT 设备连接,集群可扩展至1亿并发连接-1。除了完整支持 MQTT 3.x/5.0 协议,它还通过多协议网关支持 WebSocket-1、QUIC-1、CoAP-1、LwM2M-7 等多种物联网协议,并能将非MQTT协议转换到MQTT消息模型-7,方便连接各类异构设备。
-
可靠消息路由与低延迟传输:EMQX 支持完整的 MQTT 发布/订阅模式和多级 QoS(服务质量) 机制-1,确保消息可靠传递-1,并能实现毫秒级的低延迟消息交付-1。
-
规则引擎与数据集成:EMQX 内置了强大的基于SQL的规则引擎-1,可以实时地提取、过滤、转换和处理物联网数据-1。同时,它提供了开箱即用的数据集成能力,能够将设备数据无缝对接至 40多种后端系统,包括 Kafka、MySQL、InfluxDB 等数据库和云服务-1,实现数据的持久化和进一步分析。
-
全面的安全保障:EMQX 提供TLS/SSL加密传输-1,并内置了多重客户端认证机制(如用户名密码、JWT、X.509证书等)和灵活的基于主题的访问控制(ACL)-1,保障设备连接与数据交互的安全。
-
便捷的运维监控:通过直观的 Web Dashboard,你可以轻松地监控集群状态、管理客户端连接与订阅、配置规则-1,并进行问题诊断-1。此外,它还支持将监控指标集成到 Prometheus 等外部系统中-1。
🚀 EMQX的部署模式
EMQX 提供了灵活的部署选项以适应不同需求:
-
自托管模式(EMQX 企业版):适合需要在自有基础设施上部署的场景,提供最完整的功能和高度的控制权-1。
-
云服务模式(EMQX Platform):提供全托管的 MQTT 云服务,包括 Serverless 和专有版两种形态-2,可以帮助你快速开始使用而无需管理底层设施-2,并能够按需伸缩-2。
三、Emqx服务器的安装,测试。
1.下载 emqx-enterprise-6.0.0-ubuntu24.04-amd64.deb
wget https://www.emqx.com/zh/downloads/enterprise/6.0.0/emqx-enterprise-6.0.0-ubuntu24.04-amd64.deb

2.安装
sudo apt install ./emqx-enterprise-6.0.0-ubuntu24.04-amd64.deb

3.启动
sudo systemctl start emqx
sudo systemctl status emqx

1. 检查端口监听
EMQX启动后会监听多个端口,使用以下命令检查-9:
netstat -tunlp | grep emqx
你应该能看到类似以下的输出,表明EMQX正在监听关键端口:
-
1883:MQTT TCP协议端口-6
-
8083:MQTT over WebSocket端口-6
-
8084:MQTT over WebSocket with SSL端口-6
-
18083:EMQX Dashboard管理控制台端口-3
由于我用的是云主机

打开端口
# 开放 MQTT 默认端口
sudo ufw allow 1883/tcp# 开放 Dashboard 管理界面端口
sudo ufw allow 18083/tcp# 如果你需要使用加密连接,可以同时开放以下端口
sudo ufw allow 8883/tcp
sudo ufw allow 8083/tcp
sudo ufw allow 8084/tcp

2. 访问Dashboard管理控制台
-
打开浏览器,输入
http://你的服务器IP:18083。 -
使用默认用户名
admin和密码public登录-9。 -
首次登录后,系统会提示修改默认密码,建议你修改以提高安全性-9。
登录成功后,你可以在Dashboard上查看客户端连接数、消息吞吐量等监控信息


