MQTT - EMQX安装使用

news2024/11/15 7:33:08

阅读本文前可先参考:

MQTT - 消息队列遥测传输协议

MQTT(Message Queuing Telemetry Transport)是一种轻量级、基于发布-订阅模式的消息传输协议,适用于资源受限的设备和低带宽、高延迟或不稳定的网络环境。它在物联网应用中广受欢迎,能够实现传感器、执行器和其它设备之间的高效通信。

EMQX

使用 Erlang 语言开发的 MQTT 服务器,内置强大的规则引擎,支持许多其他 IoT 协议,比如: MQTT-SN、 CoAP、LwM2M 等

一、EMQX服务器安装部署

官方文档中提供了好几种安装方式,为了自定义安装版本和安装路径,我采用了 zip 压缩包模式安装

zip 压缩包下载网站: https://www.emqx.io/downloads/broker/?osType=Linux

1、上传并解压程序包

// 下载服务器安装包
wget https://packages.emqx.io/emqx-ce/v4.1.4/emqx-centos7-v4.1.4.zip

// 解压缩安装包
unzip emqx-centos7-v4.1.4.zip

2、启动 EMQ X Broker

cd emqx
 
./bin/emqx start
 
emqx 4.0.0 is started successfully!

查看状态

./bin/emqx_ctl status
 
Node ‘emqx@127.0.0.1’ is started
emqx v4.0.0 is running

3、停止 EMQ X Broker

./bin/emqx stop
ok

4、卸载 EMQ X Broker

直接删除 EMQ X 目录即可

EMQ 2.0 消息服务器默认占用的 TCP 端口包括:

1883 MQTT 协议端口
8883 MQTT/SSL 端口
8083 MQTT/WebSocket 端口
8080 HTTP API 端口
18083 Dashboard 管理控制台端口

EMQ 2.0 占用的上述端口,可通过 etc/emq.conf 配置文件的 ‘listener’ 段落设置:

## Examples: 1883, 127.0.0.1:1883, ::1:1883
listener.tcp.external = 0.0.0.0:1883

## Examples: 8883, 127.0.0.1:8883, ::1:8883
listener.ssl.external = 8883

## Examples: 8083, 127.0.0.1:8083, ::1:8083
listener.ws.external = 8083

二、EMQX客户端使用

网站地址: 简介 - MQTTX 文档

MQTTX 是由 EMQ 开发的一款开源跨平台 MQTT 5.0 桌面客户端,它兼容 macOS,Linux 以及 Windows 系统。其用户友好的聊天式界面使用户能够轻松创建多个 MQTT/MQTTS 连接,并进行 MQTT 消息的订阅和发布。 

我们将使用 MQTTX 提供的支持浏览器访问的 MQTT 客户端工具,访问地址为 Easy-to-Use Online MQTT Client | Try Now 。 MQTTX 还提供了桌面客户端和命令行工具

创建 MQTT 连接

在使用 MQTT 协议进行通信之前,客户端需要创建一个 MQTT 连接来连接到 Broker。

在浏览器中打开 Easy-to-Use Online MQTT Client | Try Now , 点击页面中间的 New Connection 按钮,将看到如下页面。

创建 MQTT 连接

我们在 Name 中输入 Simple Demo,然后点击右上角的 Connect 按钮,建立一个 MQTT 连接。如下图所示,表示连接成功。

MQTT 连接成功

要了解更多关于 MQTT 连接参数的内容,请查看我们的文章:建立 MQTT 连接时如何设置参数。

大多数场景下,MQTT 通过 TCP/IP 协议进行网络传输,但是 MQTT 同时也支持通过 WebSocket 或者 UDP 进行网络传输。

MQTT over TCP

TCP/IP 应用广泛,是一种面向连接的、可靠的、基于字节流的传输层通信协议。它通过 ACK 确认和重传机制,能够保证发送的所有字节在接收时是完全一样的,并且字节顺序也是正确的。

MQTT 通常基于 TCP 进行网络通信,它继承了 TCP 的很多优点,能稳定运行在低带宽、高延时、及资源受限的环境下。

MQTT over WebSocket

近年来随着 Web 前端的快速发展,浏览器新特性层出不穷,越来越多的应用可以在浏览器端通过浏览器渲染引擎实现,Web 应用的即时通信方式 WebSocket 也因此得到了广泛的应用。

很多物联网应用需要以 Web 的方式被使用,比如很多设备监控系统需要使用浏览器实时显示设备数据。但是浏览器是基于 HTTP 协议传输数据的,也就无法使用 MQTT over TCP。

MQTT 协议在创建之初便考虑到了 Web 应用的重要性,它支持通过 MQTT over WebSocket 的方式进行 MQTT 通信。关于如何使用 MQTT over WebSocket,读者可查看博客使用 WebSocket 连接 MQTT 服务器。

MQTT 连接参数的使用

连接地址

MQTT 的连接地址通常包含 :服务器 IP 或者域名、服务器端口、连接协议。

基于 TCP 的 MQTT 连接

mqtt 是普通的 TCP 连接,端口一般为 1883。

mqtts 是基于 TLS/SSL 的安全连接,端口一般为 8883。

比如 mqtt://broker.emqx.io:1883 是一个基于普通 TCP 的 MQTT 连接地址。

基于 WebSocket 的连接

ws 是普通的 WebSocket 连接,端口一般为 8083。

wss 是基于 WebSocket 的安全连接,端口一般为 8084。

当使用 WebSocket 连接时,连接地址还需要包含 Path, EMQX 默认配置的 Path 是 /mqtt。比如 ws://broker.emqx.io:8083/mqtt 是一个基于 WebSocket 的 MQTT 连接地址。

客户端 ID(Client ID)

MQTT 服务器使用 Client ID 识别客户端,连接到服务器的每个客户端都必须要有唯一的 Client ID。Client ID 的长度通常为 1 至 23 个字节的 UTF-8 字符串。

如果客户端使用一个重复的 Client ID 连接至服务器,将会把已使用该 Client ID 连接成功的客户端踢下线。

用户名与密码(Username & Password)

MQTT 协议可以通过用户名和密码来进行相关的认证和授权,但是如果此信息未加密,则用户名和密码将以明文方式传输。如果设置了用户名与密码认证,那么最好要使用 mqtts 或 wss 协议。

大多数 MQTT 服务器默认为匿名认证,匿名认证时用户名与密码设置为空字符串即可。

连接超时(Connect Timeout)

连接超时时长,收到服务器连接确认前的等待时间,等待时间内未收到连接确认则为连接失败。

保活周期(Keep Alive)

保活周期,是一个以秒为单位的时间间隔。客户端在无报文发送时,将按 Keep Alive 设定的值定时向服务端发送心跳报文,确保连接不被服务端断开。

在连接建立成功后,如果服务器没有在 Keep Alive 的 1.5 倍时间内收到来自客户端的任何包,则会认为和客户端之间的连接出现了问题,此时服务器便会断开和客户端的连接。

更多细节可查看博客:MQTT 协议中的 Keep Alive 机制。

通过通配符订阅主题

接下来,我们在上面创建的 Simple Demo 连接中通过通配符订阅主题 sensor/+/temperature,这样就可以接收所有传感器发送的温度数据了。

如下图所示,点击 New Subscription 按钮,在弹出框中的 Topic 字段中输入主题 sensor/+/temperature,QoS 保持默认值 0。

订阅 MQTT 通配符主题

订阅成功后,会在订阅列表的中间看到新增了一条记录。

MQTT 主题订阅成功

发布 MQTT 消息

接下来,我们点击左侧菜单上的 + 按钮创建两个连接,分别命名为 Sensor 1 和 Sensor 2,用来模拟两个温度传感器。

创建 MQTT 连接

连接创建成功后,会看到三个连接,每个连接左侧的在线状态指示灯都是绿色的。

三个连接创建成功

选择 Sensor 1 连接,在页面下方的发布主题中输入 sensor/1/temperature,在消息框中输入以下 JSON 格式的消息,然后点击右下方的发布按钮发送消息。

{
  "msg": "17.2"
}

发布 MQTT 消息

如下图所示,消息发送成功。

MQTT 消息发布成功

使用相同的步骤,在 Sensor 2 连接中发布以下 JSON 消息到 sensor/2/temperature 主题。

{
  "msg": "18.2"
}

您会看到 Simple Demo 连接收到两条新消息。

2条消息提示

点击 Simple Demo 连接,会看到两个传感器发送的两条消息。

查看消息详情

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2098803.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【html】新建一个html并且在浏览器运行

以下是一个简单的 HTML 小项目&#xff0c;展示一个包含标题、按钮和点击按钮后弹出提示框的基本页面 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthde…

视频提取字幕的软件有哪些?高效转录用这些

探索视频的奥秘&#xff0c;从字幕开始&#xff01;你是否曾被繁复的字幕处理困扰&#xff0c;渴望有一款简单好用的在线免费软件来轻松解锁字幕提取&#xff1f; 告别手动输入的烦恼&#xff0c;我们为你精选了6款视频字幕提取在线免费软件&#xff0c;它们不仅能一键转录&am…

新手常见错误:Unable to find a @SpringBootConfiguration

目录 报错信息 &#xff1a; 1. 使用SpringBootTest注解 2. 使用ContextConfiguration注解 3. 检查包结构和注解&#xff08;一般都是这问题&#xff09; 4. 清理和重建项目 5. 检查依赖 报错信息 &#xff1a; Unable to find a SpringBootConfiguration, you need to use C…

pdf转word怎么转换?2024快速进行文件格式转换的几款软件

pdf转word怎么转换&#xff1f;2024快速进行文件格式转换的几款软件 将PDF文件转换为Word文档是日常工作中常见的需求&#xff0c;尤其是当你需要编辑或重新利用PDF中的内容时。市面上有许多软件可以帮助你轻松完成PDF转Word的任务&#xff0c;以下是五款值得推荐的软件&#…

WordPress 资源展示型下载类主题 CeoMax-Pro_v7.6 开心版

WordPress 资源展示型下载类主题 CeoMax-Pro_v7.6 开心版&#xff1b; CeoMax-Pro是一款极致美观强大的WordPress付费资源下载主题&#xff0c;它能满足您所有付费资源下载的业务需求&#xff01; 你的想法与业务不能被主题所限制&#xff01;CeoMax-Pro强大的功能&#xff0…

Spring Security 认证源码超详细分析

Spring Security 认证源码超详细分析 认证&#xff08;Authentication&#xff09;是系统确认用户信息的重要途径&#xff0c;用户通过认证之后&#xff0c;系统才能明确用户的身份&#xff0c;进而才可以为该用户分配一定的权限&#xff0c;这个过程也叫授权&#xff08;Auth…

智慧理财新纪元:蚂蚁集团“支小宝”智能理财助理深度体验与测评

2023年9月8日&#xff0c;蚂蚁集团宣布推出面向消费者的智能金融助理“支小宝2.0”&#xff0c;这是该公司首个基于金融大模型的应用产品。该产品在语言力、知识力、专业力和安全力方面展现出卓越性能&#xff0c;旨在为用户提供包括行情分析、持仓诊断、资产配置和投资教育陪伴…

MS SQL Server partition by 函数实战三 成绩排名

目录 需求 范例运行环境 视图样本设计 功能实现 基础数据展示 SQL语句 继续排序 小结 需求 假设有若干已更新考试成绩的考生&#xff0c;考试成绩包括总成绩、分项成绩1、分项成绩2&#xff0c;其它信息包括应聘岗位名称、姓名等信息。现希望根据总成绩计算排名&#…

C语言代码练习(第十一天)

今日练习&#xff1a; 25、用指针方法对10个整数按由大到小顺序排序 26、有一个班&#xff0c;3个学生&#xff0c;各学习4门课&#xff0c;计算总平均分数以及第 n 个学生的成绩 27、有一个3 * 4的二维数组&#xff0c;要求用指向元素的指针变量输出二维数组个元素的值。 用指…

mar3d模型文件问题

上一章使用mars3D模型库 遗留一个问题 部分资源不完整 如果模型没有其他依赖文件会正常加载 若有其他依赖就会报错 正常获取到的 缺少文件的 经过观察在gltf文件中发现缺失的是这几个文件 还是通过脚本下载 脚本实例 const fs require(fs); const path require(path); co…

Idea中修改Jsp文件的头部注释模版

文章目录 方法1&#xff0c;启动idea&#xff0c;单击“file”&#xff0c;选择“settings”2&#xff0c;选择Editor——File and Code Templates——other——Jsp files——jsp File.jsp。此时编辑如下图所示的右上区域即可修改模板。 每天学一个小技巧 方法 1&#xff0c;启…

FL Studio 24汉化破解版 v24.4.1.4285(附汉化破解补丁)

FL Studio 24.4.1.4285(汉化破解版是一款无比专业的音乐制作软件&#xff0c;它无论是在功能上还是用户界面都是在业内数一数二的。就拿它的用户界面来说&#xff0c;是目前同类软件中唯一做到100%矢量化&#xff0c;这样能更好地用在4K&#xff0c;5K甚至8K显示器上&#xff0…

力扣面试经典算法150题:Z 字形变换

Z 字形变换 今天的题目是力扣面试经典150题中的数组的中等难度题&#xff1a; Z 字形变换。 题目链接&#xff1a;https://leetcode.cn/problems/zigzag-conversion/description/?envTypestudy-plan-v2&envIdtop-interview-150 题目描述 将一个给定字符串 s 根据给定的行…

Jmeter 的 jar 包开发环境搭建

01 JDK环境变量配置 JAVA_HOMEE:\Program Files\Java\jdk1.8.0_102 Path%JAVA_HOME%\bin; CLASSPATH.;%JAVA_HOME%\lib\dt.jar;.;%JAVA_HOME%\lib\tools.jar 验证环境变量有没有生效&#xff1a;看到如下信息说明 JDK 环境变量已经生效 02 配置 maven 环境 1、下载地址&…

js中数组的定义及使用

数组的定义 Array 存储按位存储&#xff0c;紧密结构,在数组中查找元素&#xff0c;就必须要遍历数组&#xff0c;查找速度慢。 优点可以根据当前元素找到前一个或者后一个元素&#xff0c;可以排序 数组引用对象的是强引用&#xff0c;存储的是她的引用地址 length属性可读可…

TF | SD 卡出现无法删除的文件,乱码文件该如何处理 macOS

TF | SD 卡出现无法删除的文件&#xff0c;乱码文件该如何处理 macOS 一、问题描述 最近手头有张用在 Miyoo 掌机上的游戏 TF 卡&#xff0c;在macOS 系统下在回收站中出现了几个特殊文件名的文件&#xff0c;始终无法删除。 二、试着解决 我试过了网上的所有方法都无法删除…

rv1126-rv1109-mkcramfs-mkfs.cramfs-打包文件系统

事情是这样的: 定制了文件系统打包功能;然后我是根据这个指令 fakeroot mkfs.cramfs rootfs_glibc_rv1126/ rootfs.img mkfs.cramfs rootfs_glibc_rv1126/ rootfs.img 起因就是这个fakeroot; 不加的话打出来的rootfs.img是没有用户权限的 然后我根据fakeroot mkfs.cramfs ro…

米壳AI:跨境电商日本市场必备神器!

各位跨境电商小伙伴们&#xff0c;在开拓日本市场的过程中&#xff0c;产品图片的翻译问题是不是常常让你感到困扰呢&#xff1f; 别着急&#xff0c;今天就给大家推荐一个超棒的在线翻译工具--米壳AI&#xff0c;它必将成为你跨境之路上的得力助手&#xff0c;让你如虎添翼。…

网络-多路io

了 fcntl 函数来操作文件描述符的状态标志&#xff0c;其中主要是为了设置非阻塞模式。下面是对 fcntl 函数及其参数的详细解释&#xff1a; fcntl 函数 fcntl 是一个用于操作文件描述符的系统调用&#xff0c;可以用来设置或获取文件描述符的各种属性。其原型如下&#xff1…

Django学习实战篇二(适合略有基础的新手小白学习)(从0开发项目)

前言&#xff1a; 从这一章开始&#xff0c;我们来创建项目typeidea&#xff0c;我把它放到了GitHub上。强烈建议你也到GitHub上注册一个账号&#xff08;如果没有的话&#xff09;&#xff0c;然后创建这样的项目。当然&#xff0c;你也可以起一个属于自己的名称。这个项目就是…