使用 MQTT.fx 接入 EMQX Cloud
本文将以 MQTT.fx 作为 MQTT 客户端工具,接入 MQTT 云服务 - EMQX Cloud。通过本文,你将能快速了解 MQTT.fx 的基础用法以及 MQTT 协议的基本概念与使用。
MQTT.fx 简介
MQTT.fx 1.0 Major 版本由 Jens Deters 使用JavaFX 技术开发,即为 Java 虚拟机应用。遗憾的是 MQTT.fx 目前已经停止维护,并转为由 Softblade 公司资助开发另发行了其商业版本 MQTT.fx® 5.0,采用收费许可证方式经营该软件。本文中的 MQTT.fx 不经特殊说明即特指 1.0 版本。
它包含主流的 MQTT 客户端功能:
- 基本订阅/推送/连接功能
- 用户认证
- SSL/TLS连接支持
- 易用的消息编辑栏
- 支持代理
此外 MQTT.fx 也有其他优秀特性:
- 支持跨平台
- 支持 $SYS 主题订阅管理 MQTT Broker
- 完整的日志控制台
- 支持 JavaScript 脚本处理消息
- 支持预定义模版
但同时也有缺陷:
- 不支持 MQTT 5.0 协议
- 一次只能建立一个连接,不方便多连接调试
- 不支持 WebSocket 协议,无法调试 MQTT over Webscoket 的情况
EMQX Cloud 简介
EMQX Cloud 是由 EMQ 推出的可连接海量物联网设备,集成各类数据库及业务系统的全托管云原生 MQTT 服务。作为全球首个全托管的 MQTT 5.0 公有云服务,EMQX Cloud 提供了一站式运维代管、独有隔离环境的 MQTT 消息服务。
在万物互联的时代,EMQX Cloud 可以帮助用户快速构建面向物联网领域的行业应用,轻松实现物联网数据的采集、传输、计算和持久化。
本文将使用 EMQX Cloud 提供的 免费公共 MQTT 服务器 作为本次测试的 MQTT 服务器地址,服务器接入信息如下:
- Broker: broker-cn.emqx.io
- TCP Port: 1883
- SSL/TLS Port: 8883
更多详情请访问 EMQX Cloud 官网,或查看 EMQX Cloud 文档。
MQTT.fx 使用
预览
其主页面如下图所示,最上方为 MQTT Broker 连接地址栏,及其连接配置。其下方功能 Tabs 含有 Publish 发布栏、Subscribe 订阅栏、Scripts 脚本栏、Broker Status 状态消息栏、Log 日志信息控制栏。
其中每一个 Tab 均支持拖拽成为单独窗口,如下图所示:
连接
首先 MQTT client 与 Broker 通讯需要建立连接。点击连接地址栏中输入框右边的配置图标,进入具体的连接配置。
选择 Profile Type 为 MQTT Broker。Broker Address 填入 broker-cn.emqx.io
,Broker Port 填入 1883
,如下图所示:
broker-cn.emqx.io 为国内服务器,broker.emqx.io 为国外服务器,读者可自行选择一个进行连接。
点击OK,确认配置,回到主界面,点击 Connect ,可见右边的圆圈变为绿色,表示当前连接连通,如下图所示:
订阅/发送消息
完成连接的建立之后,即可开始订阅消息。因为 MQTT 协议采用的是订阅/推送的方式,所以我们需要在连接之后订阅主题,之后主题上有消息产生即可收到来自 EMQX Cloud 推送。
点击进入 Subscribe Tab 下,在主题框中输入 /testTopic/1
,点击 Subscribe 订阅按钮,在左侧出现订阅的主题列表,订阅的主题目前消息数量为0,如下图所示:
之后,我们将把消息推送到 Broker,回到 Publish 下,并且输入主题 /testTopic/1
,并在消息输入框中输入"hello world"等消息,如下图所示:
点击 Publish 发送,回到 Subscribe Tab,发现订阅的主题/testTopic/1
收到消息,如下图所示:
我们使用 MQTT.fx 这一客户端向 EMQX Cloud 下的 /testTopic/1
主题发送了消息"hello wolrd",订阅了这个主题的所有客户端都会收到这个消息,包括刚刚订阅了该主题的发送客户端。
脚本
使用脚本可以更加灵活地自定义消息推送逻辑,点击 Script Tab,点击 Edit 对脚本内容进行修改,修改为以下内容:
function execute(action) {
mqttManager.publish("/testTopic/1", "hello world from script");
return action;
}
其中 mqttManager
是 MQTT.fx 脚本功能开放的 API,主要有:
- publish(),推送消息
- subscribe(),订阅主题
- unsubscribe(),取消主题订阅
- output,输出消息到控制台
点击 Execute 执行,之后回到 Subscribe 下发现消息增加,其内容为 “hello world from script”。脚本发送功能正常,如下图所示:
日志
在日志内,我们可以查看 MQTT.fx 与 EMQX Cloud 交互过程,例如主题订阅,消息推送,消息接收等:
SSL/TLS连接
以 CA 自签名服务为例子,展示如何启用 SSL 协议连接到 EMQX Cloud。
打开设置,和普通连接一样填写好 Broker Address 和 Broker Port(分别为 broker.emqx.io
和 8883
),选择 SSL/TLS
项,选择 TLSv1.2 协议,勾选 CA signed server certficate,之后选择应用,如下图所示:
点击连接,可以看到右边的锁图标是关闭的,表示启用了 SSL,查看日志,发现 SSL 连接相关端口 8883 相关字样,连接 SSL/TLS 成功。