概述
云原生消息引擎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连接状态
控制台查看实例
- 购买实例后,在控制台查看实例状态
- 可以通过运行中实例的实例名称跳转到实例的详情页

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

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

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

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

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

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

Python3 paho 接入 EMQx
Paho 提供了一系列库,允许开发者使用 MQTT 协议进行消息通信。对于 Python SDK,可以使用 pip 安装 paho-mqtt,通过它来连接 MQTT 服务器、发布消息和订阅主题。
安装 paho-mqtt
pip install paho-mqtt
python3 构建 MQTT 连接
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()
(可选)通过MQTTx连接EMQx实例
- MQTTx 中通过配置服务器地址、端口、用户名、密码 接入云原生消息引擎 MQTT 版
- MQTTx 是一款开源的 MQTT 工具,详见下方参考

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

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