MQTT EMQX Protocol Buffers

发布于:2025-07-31 ⋅ 阅读:(19) ⋅ 点赞:(0)

目录

MQTT

介绍

MQTT Publish / Subscribe Architecture

MQTTX

预览

主要功能

关系

一、核心区别与联系

二、EMQ X 对 MQTT 的增强

1. 高性能与扩展性

2. 协议扩展

3. 安全与认证

4. 规则引擎与数据集成

5. 监控与管理

三、典型应用场景

四、如何选择 Broker?

五、快速上手 EMQ X

1. 安装与启动

2. 使用命令行测试

3. Python 客户端示例

六、总结


MQTT

介绍

MQTT:物联网消息传递标准
MQTT是用于物联网(IoT)的OASIS标准消息传递协议。它被设计为一种极其轻量级的发布/订阅消息传输,非常适合以较小的代码占用和最小的网络带宽连接远程设备。MQTT如今被广泛应用于各种行业,如汽车、制造业、电信、石油和天然气等。

MQTT Publish / Subscribe Architecture

参考:

官网:MQTT - The Standard for IoT Messaging

MQTT协议详解(完整版)-CSDN博客

MQTTX

 是由 EMQ 开发的一款开源跨平台 MQTT 5.0 桌面客户端,它兼容 macOS,Linux 以及 Windows 系统。

MQTTX 的用户界面 UI 采用聊天式设计,使得操作逻辑更加简明直观。它支持用户快速创建和保存多个 MQTT 连接,便于测试 MQTT/MQTTS 连接,以及 MQTT 消息的订阅和发布。

在下载和安装前,请访问我们的 官网 或者 GitHub 页面了解最新的版本信息。使用最新版本能帮助提升使用体验。如果你对本项目有一定了解,你也可以直接克隆 MQTTX 的源码仓库,自行构建并使用。如果在使用过程中遇到任何问题,欢迎前往 GitHub issues 提出问题或者建议,或者 Fork 我们的项目并提交你修改后的 PR,我们将会认真查阅并及时回复。

预览

mqttx-gif

主要功能

  • 采用聊天界面设计,使得操作更加简单明了
  • 跨平台兼容,支持在 Windows,macOS,Linux 系统上运行
  • 100% 兼容 MQTT v5.0,v3.1.1 和 v3.1 协议
  • 订阅的 MQTT 主题支持自定义颜色标签
  • 支持单向和双向 SSL 认证,同时支持 CA 和自签名证书
  • 支持通过 WebSocket 连接 MQTT 服务器
  • 支持 Hex, Base64, JSON, Plaintext 等 Payload 格式转换
  • 自定义脚本支持模拟 MQTT 发布/订阅测试
  • 提供完整的日志记录功能
  • 多语言支持:简体中文、英语、日语、土耳其语及匈牙利语 🇨🇳 🇯🇵 🇺🇸 🇹🇷 🇭🇺
  • 自由切换 Light、Dark、Night 三种主题模式

开发 - MQTTX 文档

关系

MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,而 EMQ X(现在称为 emqx)则是一个开源的 MQTT 消息代理服务器(Broker)。它们的关系类似于 HTTP 协议 与 Nginx/Apache 服务器 的关系:MQTT 定义通信规则,EMQ X 实现这些规则并提供具体服务

一、核心区别与联系

MQTT EMQ X (emqx)
协议标准 软件实现
定义消息格式、通信流程和语义 提供服务器软件,处理客户端连接、消息路由和协议实现
不依赖特定技术栈 基于 Erlang/OTP 构建,支持高并发和分布式
无状态(协议层面) 有状态(维护会话、订阅关系等)
常见版本:3.1.1、5.0 最新版本:v5.0(兼容 MQTT 3.1/3.1.1/5.0)

二、EMQ X 对 MQTT 的增强

EMQ X 作为 MQTT Broker,不仅实现了协议规范,还提供了一系列企业级功能:

1. 高性能与扩展性
  • 百万级并发连接:单节点支持 100 万 + 设备连接(基于 Erlang 的轻量级进程模型)。
  • 分布式集群:支持多节点集群,通过 Raft 算法实现数据一致性(如共享订阅状态)。
2. 协议扩展
  • 多协议支持:除 MQTT 外,还支持 MQTT-SN(适用于低功耗设备)、CoAP、HTTP、WebSocket 等。
  • 桥接功能:与其他 MQTT Broker 或 Kafka、RabbitMQ 等消息系统集成。
3. 安全与认证
  • TLS/SSL 加密:支持双向认证(客户端证书)。
  • 多种认证方式:内置数据库认证、LDAP、JWT、外部 HTTP 服务认证等。
  • 细粒度 ACL:基于用户名、客户端 ID、IP 地址控制主题访问权限。
4. 规则引擎与数据集成
  • SQL 风格规则:通过规则引擎过滤和转换消息(如将 JSON 数据存入数据库)。
  • 数据桥接:将 MQTT 消息转发至 MySQL、PostgreSQL、Redis、Kafka 等后端系统。
5. 监控与管理
  • 可视化 Dashboard:实时查看连接数、流量、主题统计等指标。
  • Prometheus + Grafana 集成:支持企业级监控和告警。

三、典型应用场景

  1. 物联网平台

    • MQTT 作为设备与平台的通信协议,EMQ X 作为核心 Broker 处理百万级设备连接。
  2. 边缘计算

    • 在边缘节点部署 EMQ X 轻量级版本(如 Nano 版本),本地处理设备数据,减少云端压力。
  3. 微服务通信

    • 用 MQTT 替代 HTTP 作为微服务间的异步通信协议,EMQ X 实现服务间消息路由。
  4. 实时数据推送

    • 如金融行情推送、社交消息通知,利用 EMQ X 的持久会话和保留消息特性。

四、如何选择 Broker?

根据场景需求选择合适的 MQTT Broker:

特性 EMQ X Mosquitto HiveMQ
开源 / 商业 开源(社区版)+ 商业 开源 商业(含社区版)
单机并发 100 万 + 连接 10 万级连接 100 万 + 连接
分布式集群 支持 不支持(需手动桥接) 支持
企业级功能 规则引擎、数据集成、监控 基础功能 企业级安全、管理工具
适合场景 大规模 IoT、分布式系统 小型项目、测试环境 金融、电信等高可靠场景

五、快速上手 EMQ X

1. 安装与启动

# Docker 快速启动(单节点)
docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:5.0

# 访问 Dashboard:http://localhost:18083(默认用户:admin,密码:public)
2. 使用命令行测试

# 订阅主题
mosquitto_sub -h localhost -p 1883 -t "test/topic"

# 发布消息
mosquitto_pub -h localhost -p 1883 -t "test/topic" -m "Hello from EMQ X!"
3. Python 客户端示例
import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
    print(f"连接结果: {rc}")
    client.subscribe("test/topic")

def on_message(client, userdata, msg):
    print(f"收到消息: {msg.topic} {msg.payload.decode()}")

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("localhost", 1883, 60)
client.loop_forever()

六、总结

通过组合使用 MQTT 协议和 EMQ X Broker,开发者可以快速构建可靠、高效的物联网或实时通信系统。

  • MQTT 是基础:定义消息如何在客户端和 Broker 之间传输。
  • EMQ X 是实现:提供高性能、可扩展的 MQTT 消息服务,简化开发并增强功能。
  • 选择依据:根据项目规模和需求,小型场景可选择 Mosquitto,大规模分布式系统建议使用 EMQ X 或 HiveMQ。

MQTT 是一种轻量级的通信协议,用于在物联网设备之间进行消息传递,它通过发布 / 订阅模式实现消息的传递,具有低带宽、低功耗和可靠性的特点。

EMQX 是一款开源的大规模分布式 MQTT 消息服务器,功能丰富,专为物联网和实时通信应用而设计,能处理大量的 MQTT 连接和消息,支持多种协议,采用无主分布式的结构确保高可用性和水平扩展性。

Protocol Buffers(Protobuf)是一种由 Google 开发的用于序列化结构化数据的语言无关、平台无关、可扩展且高效的机制,通过定义消息的结构和格式来实现数据的序列化和反序列化,能生成多种编程语言的代码,可提供更高效的数据传输和更小的数据存储空间。

三者的关系是,在物联网等应用场景中,常常会将它们结合使用。EMQX 作为 MQTT 消息代理服务器,可接收和处理使用 MQTT 协议传输的消息。而 Protobuf 可用于对 MQTT 消息中的数据进行序列化和反序列化,以更高效地传输和存储结构化数据。例如,在一些物联网项目中,设备可能会使用 MQTT 协议将数据发布到 EMQX 服务器,而这些数据可以采用 Protobuf 格式进行编码,这样可以在保证数据准确性的同时,减少数据传输的带宽占用和存储成本。EMQX 的规则引擎也支持对 Protobuf 格式消息的编解码,方便对这类数据进行处理和验证


网站公告

今日签到

点亮在社区的每一天
去签到