You need to enable JavaScript to run this app.
导航
快速开始-构建第一个mqtt连接
最近更新时间:2025.03.13 13:51:05首次发布时间:2025.03.05 21:44:45
我的收藏
有用
有用
无用
无用

概述

云原生消息引擎MQTT版与火山引擎的多个云产品组合,可以支持大规模的MQTT连接。MQTT的企业级产品中涉及 云产品控制台、EMQx Dashboard、MQTT认证、鉴权、接入 等多个概念。本文组合多个文档,为首次使用 MQTT 的客户快速构建第一个MQTT连接。

准备工作

  • 云原生消息引擎 MQTT 版
  • 弹性公网 IP
  • (可选)MQTTx

操作流程

  • 购买实例
  • 配置 emqx Dashboard 控制台用户
  • 登陆 emqx Dashboard 控制台
  • 配置 mqtt 客户端连接认证方式(以 password-base为例)
    • 配置认证使用的用户名和密码
  • 配置 mqtt 客户端权限
  • 绑定 EIP,新增公网接入点
  • Python3 paho 接入 EMQx
  • (可选)MQTTx 发起公网 MQTT 接入 EMQx
  • 检查MQTT连接状态

配置公网接入

控制台查看实例

  • 购买实例后,在控制台查看实例状态
  • 可以通过运行中实例的实例名称跳转到实例的详情页

Image

绑定 EIP,新增公网接入点

  • 云原生消息引擎支持创建一个公网接入的 MQTT 接入点,即可实现公网的 MQTT 设备接入,详见添加公网监听器
  • 返回控制台,在监听器页面选择公网,绑定已有的空闲 EIP,协议选择为 TCP 协议

Image

免密接入 EMQx

Paho 提供了一系列库,允许开发者使用 MQTT 协议进行消息通信。对于 Python SDK,可以使用 pip 安装 paho-mqtt,通过它来连接 MQTT 服务器、发布消息和订阅主题。

安装 paho-mqtt

pip install paho-mqtt

python3 构建 MQTT 连接

  • 创建 公网接入点 后,在控制台看到 公网接入地址
  • 替换新的 broker_address 接入 emqx
import paho.mqtt.client as mqtt

# 当客户端连接到服务器时调用此回调函数
def on_connect(client, userdata, flags, rc):
    print("连接结果码:", rc)

# 当收到消息时调用此回调函数
def on_message(client, userdata, msg):
    print("收到消息,主题:", msg.topic, "内容:", msg.payload.decode())

# 创建一个 MQTT 客户端实例
client = mqtt.Client()

# 绑定回调函数
client.on_connect = on_connect
client.on_message = on_message

# 连接到指定的 MQTT 服务器,不使用 SSL,不需要用户名密码
# 修改 emqx broker 位置,将控制台的公网接入点地址复制到 broker_address 
broker_address = "mqtt-xxxxxxxxxx.mqtt.volces.com"
broker_port = 1883
client.connect(broker_address, broker_port, keepalive=60)

# 开始网络循环,等待并处理 MQTT 消息
client.loop_forever()

检查 MQTT 设备连接状态

  • EMQx Dashboard 侧栏的 监控 -> 客户端 中可以查看当前设备的连接状态,以及连接详情

Image


password-based 认证接入

配置用户,登陆 Dashboard

  • Dashboard 用户采用 RBAC (Role Based Access Control)模型,详见创建用户
  • 首次访问 EMQx Dashboard 控制台时,需要配置 Dashboard 的用户名、密码、角色
  • 此处权限建议设置为“管理员”,以便于后续演示操作

Image

登陆Dashboard

  • EMQx Dashboard 默认配置为公网可访问,通过 Dashboard 地址可以接入 EMQx Dashboard,详见 登录 Dashboard

Image

配置 mqtt 客户端连接认证方式

  • EMQX 通过内置数据库为用户提供了一种低成本、开箱即用的密码认证方式。启用后,EMQX 会将内置的 Mnesia 数据库存储客户端身份凭据,详见 客户端认证概述
  • 点击左侧导航栏的 访问控制 -> 客户端认证 中创建认证方式
  • 认证方式选择 “Password-Based”(默认)
  • 数据源选择 “内置数据库”(默认)
  • 配置参数选择 “username”(默认)、加密方式选择“sha256”(默认),加盐方式 “suffix”(默认)

Image

配置认证使用的用户名和密码

  • 内置数据库的用户管理中添加 mqtt client 认证所使用的 用户名 和 密码
  • 后续 MQTT Client 连接需要在连接中配置该用户名和密码
  • 此例子中用户名配置为【user】,密码为【123456】

Image

配置 mqtt 客户端权限

  • 左侧导航栏的 访问控制 -> 客户端授权,添加客户端授权方式,详见 客户端授权概述
  • 数据源选择 “内置数据库”(默认)
  • 内置数据库 的 权限管理 中,针对 所有用户 ,添加一条针对 devices/# 主题的 发布和订阅时 允许 权限

Image

Python3 paho 用户名密码接入 EMQx

import paho.mqtt.client as mqtt

# 连接成功回调函数
def on_connect(client, userdata, flags, rc):
    print("连接返回码:", rc)

# 消息接收回调函数
def on_message(client, userdata, msg):
    print("主题:", msg.topic)
    print("消息:", msg.payload.decode())

# 创建 MQTT 客户端实例
client = mqtt.Client()

# 设置用户名和密码
client.username_pw_set("user", "123456")

# 绑定回调函数
client.on_connect = on_connect
client.on_message = on_message

# 连接到 MQTT 服务器(不使用 SSL)
client.connect("mqtt-0040ogedpfhc.mqtt.volces.com", 1883, 60)

# 开启网络循环,保持连接
client.loop_forever()

检查 MQTT 连接状态

Image


通过MQTTx连接EMQx实例(可选)

  • MQTTx 中通过配置服务器地址、端口、用户名、密码 接入云原生消息引擎 MQTT 版
  • MQTTx 是一款开源的 MQTT 工具,详见下方参考

Image

参考:MQTTx

MQTTX 是由 EMQ 开发的一款开源跨平台 MQTT 5.0 桌面客户端,它兼容 macOS,Linux 以及 Windows 系统。用户界面采用聊天式设计,使得操作逻辑更加简明直观。它支持用户快速创建和保存多个 MQTT 连接,便于测试 MQTT 连接,以及消息的订阅和发布。参考 https://mqttx.app/zh/docs/downloading-and-installation 安装 MQTTx 客户端。