MQTT学习从零到实战:二

本次基于MQTT实现的服务器之一:EMQX 

协议版本:5.0

文档路径:快速开始 | EMQX 5.0 文档

MQTT协议服务器搭建

        本次使用的服务器是EMQX。

        下载地址:立即开始 | EMQX

        从中我们也可以看出,企业版支持数据持久化,需要收费。如果是对数据没有太高要求的话,可以使用免费版。开源版个人认为适用场景:实现手机远程控制家中的灯光、门窗、温度等设备。设备的心跳检测等对数据要求稍低的场景。例如心跳少跳一次或者温度少发送几次,不会影响整体业务的需求。

我们以Windows版本为例:

访问:http://localhost:18083/    默认账号:admin  默认密码:public

备注:EMQX支持集群,访问控制等等。。具体可以参考文档!此次只介绍一些基础的信息。

MQTT协议属于C/S服务,因此,我们要再启动客户端。

按文档操作客户端:安装 - MQTTX 文档

客户端安装访问后:

这个时候客户端和服务器我们都有了,可以自己参考文档进行相关的配置。

介绍一些名词或功能:

服务端

在发布消息的客户端和订阅的客户端之间充当中介,将所有接收到的消息转发到匹配的订阅客户端。所以有时我们也会直接将服务端称为 Broker。

客户端

使用 MQTT 协议连接到 MQTT 服务端的设备或应用程序。它既可以是发布者,也可以是订阅者,也可以具备这两种身份。

主题

主题被用来标识和区分不同的消息,它是 MQTT 消息路由的基础。发布者可以在发布时指定消息的主题,订阅者则可以选择订阅自己感兴趣的主题来接收相关的消息。

通配符

订阅者可以在订阅的主题中使用通配符来达到一次订阅多个主题的目的。MQTT 提供了单层通配符和多层通配符两种主题通配符,以满足不同的订阅需要。

QoS

MQTT 定义了三种 QoS 等级,来分别提供不同的消息可靠性保证。每条消息都可以在发布时独立设置自己的 QoS。QoS 0 最多交付一次,消息可能丢失;QoS 1 至少交付一次,消息可以保证到达,但是可能重复;QoS 2 只交付一次,消息保证到达,并且不会重复。QoS 越大,消息的传输复杂程度也越高,我们需要根据实际场景来选择合适的 QoS。

会话

QoS 只是设计了消息可靠到达的理论机制,而会话则确保了 QoS 1、2 的协议流程得以真正实现。

会话是客户端与服务端之间的有状态交互,它可以仅持续和网络连接一样长的时间,也可以跨越多个网络连接存在,我们通常将后者称为持久会话。我们可以选择让连接从已存在的会话中恢复,也可以选择从一个全新的会话开始。

保留消息

与普通消息不同,保留消息可以保留在 MQTT 服务器中。任何新的订阅者订阅与该保留消息中的主题匹配的主题时,都会立即接收到该消息,即使这个消息是在它们订阅主题之前发布的。

这使订阅者在上线后可以立即获得数据更新,而不必等待发布者再次发布消息。在某种程度上,我们可以把保留消息当作是一个消息 “云盘” 来使用:随时上传消息到 “云盘”,然后在任意时刻从 “云盘” 获取消息。当然,这个 “云盘” 还有一个主题下只能存储一条最新的保留消息的限制

遗嘱消息

发布订阅模式的特性决定了,除了服务器以外没有客户端能够感知到某个客户端从通信网络中离开。而遗嘱消息则为连接意外断开的客户端提供了向其他客户端发出通知的能力。

客户端可以在连接时向服务器设置自己的遗嘱消息,服务器将在客户端异常断开后立即或延迟一段时间后发布这个遗嘱消息。而订阅了对应遗嘱主题的客户端,将收到这个遗嘱消息,并且采取相应的措施,例如更新该客户端的在线状态等等。

共享订阅

默认情况下,消息会被转发给所有匹配的订阅者。但有时,我们可能希望多个客户端协同处理接收到的消息,以便以水平扩展的方式来提高负载能力。又或者,我们希望为客户端增加一个备份客户端,当主客户端离线时,能够无缝切换到备份客户端继续接收消息,以确保高可用性。。

而 MQTT 的共享订阅特性,则提供了这一能力。我们可以将客户端划分为多个订阅组,消息仍然会被转发给所有订阅组,但每个订阅组内每次只会有一个客户端收到消息。

$SYS 主题

以 $SYS/ 为前缀的主题被保留给服务器用来发布一些特定的消息,比如服务器的运行时间、客户端的上下线事件通知、当前连接的客户端数量等等。我们一般将这些主题称为系统主题,客户端可以订阅这些系统主题来获取服务器的有关信息。

延迟发布

延迟发布可以实现按照用户配置的时间间隔延迟发布消息,当客户端使用特殊主题前缀 $delayed/{DelayInteval} 发布消息时,将触发延迟发布功能。

延迟发布主题的具体格式如下:

$delayed/{DelayInterval}/{TopicName}
  • $delayed:使用 $delay 作为主题前缀的消息都将被视为需要延迟发布的消息。延迟间隔由下一主题层级中的内容决定。
  • {DelayInterval}:指定该 MQTT 消息延迟发布的时间间隔,单位是秒,允许的最大间隔是 4294967 秒。如果 {DelayInterval} 无法被解析为一个整型数字,EMQX 将丢弃该消息,客户端不会收到任何信息。
  • {TopicName}:MQTT 消息的主题名称。

例如:

  • $delayed/15/x/y:15 秒后将 MQTT 消息发布到主题 x/y
  • $delayed/60/a/b:1 分钟后将 MQTT 消息发布到 a/b
  • $delayed/3600/$SYS/topic:1 小时后将 MQTT 消息发布到 $SYS/topic
配置延迟发布
delayed {
    enable = true
    max_delayed_messages = 12435
}

enable:表示开启或关闭延迟发布功能。

max_delayed_messages:表示允许同时存在的延迟发布的消息的最大数量。

自动订阅

自动订阅能够给 EMQX 设置多个规则,在设备成功连接后按照规则为其订阅指定主题,不需要额外发起订阅。

排它订阅

排它订阅允许对主题进行互斥订阅,一个主题同一时刻仅被允许存在一个订阅者,在当前订阅者未取消订阅前,其他订阅者都将无法订阅对应主题。

排它订阅的前缀和示例:

示例前缀真实主题名
$exclusive/t/1$exclusive/t/1

当某个客户端 A 订阅 $exclusive/t/1 后,其他客户端再订阅 $exclusive/t/1 时都会失败,直到 A 取消了对 $exclusive/t/1 的订阅为止。

注意: 排它订阅必须使用 $exclusive/ 前缀,在上面的示例中,其他客户端依然可以通过 t/1 成功进行订阅。

下面提前一些笔者感兴趣的功能,如果想了解其它功能,可以参考文档。

1.在搭配数据桥接的前提下,支持sql数据的处理。向我们展示了字段,内置的SQL函数等等。

2.通过数据桥接,用户可以实时地将消息从 EMQX 发送到外部数据系统。如果使用双向数据桥接,用户还可以从外部数据系统拉取数据并发送到 EMQX 的某个主题。支持常用的Kafka/redis/mysql/mongodb等等。(企业版才支持,收费的)也支持MQTT服务器之间的桥接转发等等。

3.支持SSL/TLS连接

4.支持备份与恢复

EMQX 5.1 引入了一个用户友好的命令行工具用于数据导入和导出。尽管与 EMQX 4.x 中提供的工具类似,但它具有一些显著的差异,并且与之不兼容。

在 EMQX 4.x 中,使用单个 JSON 文件保存 EMQX 配置和内置数据库的所有必要数据。然而,在 EMQX 5.1 中,将导出的数据压缩为 tar 格式的文件,这样可以更高效、更有结构地处理潜在的大量用户数据。

5.速率限制

EMQX 提供对接入速度、消息速度的限制,从入口处避免了系统过载,保证了系统的稳定和可预测的吞吐。  配置文件:emqx.conf

6.告警 

EMQX 内置监控与告警功能,目前支持监控 CPU 占用率、系统与进程的内存占用率、进程数量、规则引擎资源状态、集群脑裂与愈合,并会在发现异常时进行告警。告警的激活与取消都将产生一条警告日志,EMQX 会同时发布一条主题为 $SYS/brokers/<Node>/alarms/activate 或 $SYS/brokers/<Node>/alarms/deactivate 的 MQTT 消息,用户可以通过订阅对应主题来获取告警通知。

7.日志

通过 EMQX 的日志功能,您可查看客户端访问、操作系统或网络异常等问题,如登录错误,异常访问,性能故障等等,并基于日志信息进行问题排查或系统性能优化。

EMQX 支持两种不同的日志输出方式:控制台输出日志和文件输出日志。您可以根据需要选择输出方式或同时启用这两种方式。

为避免日志数据过多或日志写入过慢等问题,EMQX 默认开启了过载保护机制,以确保正常业务不被日志影响。

8.主题监控

EMQX 提供了主题监控功能,可以统计指定主题下的消息收发数量、速率等指标。您可以通过 Dashboard 的 问题分析 -> 主题监控 页面查看和使用这一功能,也可以通过 HTTP API 完成相应操作。

9.集成 Prometheus

可选择提供结合 Prometheus 和 Grafana 实现 EMQX 统计指标可视化。

关于EMQX服务器具体使用,感兴趣的朋友自己去看一下对应的产品文档。 以上只是粗略介绍!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

springboot+template模板语法+SQL如何从零开始创建并运行一个实例

目录 一、创建springboot项目 二、启动程序测试一下&#xff0c;右上角点击运行&#xff1a; 三、代码编写 1、先在entity里写一个实体类&#xff0c;User&#xff1a; 2、写一个mapper接口&#xff0c;写四个接口&#xff0c;增删改查。&#xff08;我这里后面就以获取所…

蓝桥杯每日一题——棋盘

问题描述 小蓝拥有 n xn 大小的棋盘&#xff0c;一开始棋盘上全都是白子。小蓝进行了 m 次操作&#xff0c;每次操作会将棋盘上某个范围内的所有棋子的颜色取反(也就是白色棋子变为黑色&#xff0c;黑色棋子变为白色)请输出所有操作做完后棋盘上每个棋子的颜色。输入格式 输入的…

3.14_理解专业术语_3.18

分布式电源 风能、太阳能、生物质能等新能源的应用&#xff0c;有很大部分是分散式的&#xff0c;且容量较小。这些分散布置在电力负荷附近的、容量在数千瓦至数十兆瓦之间的、为环境兼容的、节能的发电装置&#xff0c;如燃气轮机、内燃机、小型光伏发电站、燃料电池、风力发电…

Docker知识--01

虚拟化 # 什么是虚拟化 在计算机中&#xff0c;虚拟化&#xff08;英语&#xff1a;Virtualization&#xff09;是一种资源管理技术&#xff0c;是将计算机的各种实体资源&#xff0c;如服务器、网络、内存及存储等&#xff0c;予以抽象、转换后呈现出来&#xff0c;打…

【计算机网络】IP 协议

网络层IP协议 一、认识 IP 地址二、IP 协议报头格式三、网段划分1. 初识子网划分2. 理解子网划分3. 子网掩码4. 特殊的 IP 地址5. IP 地址的数量限制6. 私有 IP 地址和公网 IP 地址7. 理解全球网络&#xff08;1&#xff09;理解公网&#xff08;2&#xff09;理解私网&#xf…

C语言---指针的两个运算符:点和箭头

目录 点&#xff08;.&#xff09;运算符箭头&#xff08;->&#xff09;运算符需要注意实际例子 C语言中的指针是一种特殊的变量&#xff0c;它存储了一个内存地址。点&#xff08;.&#xff09;和箭头&#xff08;->&#xff09;是用于访问结构体和联合体成员的运算符。…

[LeetBook]【学习日记】排序算法——归并排序

主要思想 归并排序是一种分治算法&#xff0c;其排序过程包括分和治分是指将要排序的序列一分为二、二分为四&#xff0c;直到单个序列中只有一个数治是指在分完后&#xff0c;将每两个元素重新组合&#xff0c;四合为二、二合为一&#xff0c;最终完成排序 图片作者&#xf…

SkiaSharp使用SKCanvas.DrawText绘制2D文本时部分字符渲染位置异常。

Skia是一个开源的 2D 图形库&#xff0c;支持多种平台和语言&#xff0c;可以用于绘制各种图形和效果&#xff0c;SkiaSharp是其.Net版本。 在绘制文本时&#xff0c;一般做法是&#xff1a; private void SkContainer_PaintSurface(object? sender, SkiaSharp.Views.Deskto…

Linux系统安装宝塔面板结合内网穿透实现公网登录本地面板——“cpolar内网穿透”

文章目录 一、使用官网一键安装命令安装宝塔二、简单配置宝塔&#xff0c;内网穿透三、使用固定公网地址访问宝塔 宝塔面板作为建站运维工具&#xff0c;适合新手&#xff0c;简单好用。当我们在家里/公司搭建了宝塔&#xff0c;没有公网IP&#xff0c;但是想要在外也可以访问内…

Midjourney 和 Dall-E 的优劣势比较

Midjourney 和 Dall-E 的优劣势比较 Midjourney 和 Dall-E 都是强大的 AI 绘画工具&#xff0c;可以根据文本描述生成图像。 它们都使用深度学习模型来理解文本并将其转换为图像。 但是&#xff0c;它们在功能、可用性和成本方面存在一些差异。 Midjourney 优势: 可以生成更…

攻防世界新手模式例题(Web)

PHP2 首先我们查看页面&#xff0c;查看前端代码 发现均没有什么有效信息&#xff0c;由题目可知&#xff0c;此问题与php相关&#xff0c;于是我们可以看一下他的index.php文件 查看时用?index.phps 补充知识&#xff1a;phps文件就是php的源代码文件&#xff0c;通常用于…

算法之位运算

常见的位运算操作: 首先先熟悉一下常见的位运算操作: 1. 基础位运算 左移<<, 右移>>, 按位与&, 按位或|, 按位异或^, 按位取反~ 注意: 异或其实是一种无进位相加. 2. 给定一个 n, 确定它的二进制表示中第x位是 0 还是 1 n & (1<<x) 或者 (n>…

消费者组大观:5种状态,1场分布式奇迹

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 消费者组大观&#xff1a;5种状态&#xff0c;1场分布式奇迹 前言EmptyDead状态处理 Dead 状态的策略&#xff1a;防范和恢复&#xff1a; PreparingRebalance处理 "PreparingRebalance" 状…

【Leetcode-102.二叉树的层序遍历】

题目详情&#xff1a; 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]]示例…

Linux软件管理(1)

软件管理 下载 wget Linux wget是一个下载文件的工具&#xff0c;它用在命令行下。 wget工具体积小但功能完善&#xff0c;它支持断点下载功能&#xff0c;同时支持FTP和HTTP下载方式&#xff0c;支持代理服务器和设置起来方便简单。 1.语法 wget [选项]……[URL]…… 2、…

React - 实现菜单栏滚动

简介 本文将会基于react实现滚动菜单栏功能。 技术实现 实现效果 点击菜单&#xff0c;内容区域会自动滚动到对应卡片。内容区域滑动&#xff0c;指定菜单栏会被选中。 ScrollMenu.js import {useRef, useState} from "react"; import ./ScrollMenu.css;export co…

【MATLAB源码-第165期】基于matlab的科莫多巨蜥算法(KMA)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 科莫多巨蜥算法&#xff08;Komodo Mlipir Algorithm&#xff0c;简称KMA&#xff09;是一种受到印尼科莫多岛上独特生物——科莫多巨蜥启发的创新算法。尽管这个算法的名称听起来很有趣&#xff0c;但实际上它并不是一个公认…

写论文matplotlib使用同一色系的颜色

推荐网站 Colorsinspo - All in one resource for finding everything about colors | Colorsinspo 网页直接可以复制颜色 除此之外&#xff0c;自己还试了一个色系&#xff08;可惜不理想&#xff0c;看着不均匀&#xff09;&#xff0c;先存到这里 color_name [lightgr…

数据结构从入门到精通——直接插入排序

直接插入排序 前言一、直接插入排序的基本思想&#xff1a;二、直接插入排序的实例三、直接插入排序的动图展示四、直接插入排序的具体代码test.c 前言 直接插入排序是一种简单的排序算法&#xff0c;其工作原理是逐个将待排序元素插入到已排序序列中的适当位置&#xff0c;直…