MQTT 介绍与学习 —— 筑梦之路

之前写过的相关文章:

MQTT协议(转载)——筑梦之路_mqtt url-CSDN博客

k8s 部署mqtt —— 筑梦之路-CSDN博客

CentOS 7 搭建mqtt服务——筑梦之路_腾讯云宝塔搭 centos 7.9.2009 x86_64 建标准mqtt服务器-CSDN博客

mqtt简介

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议。 

客户端服务端
一个使用MQTT协议的应用程序或者设备,它总是建立到服务器的网络连接。客户端可以:也称为"消息代理"(Broker),可以是一个应用程序或一台设备。它是位于消息发布者和订阅者之间,它可以:
- (1)发布其他客户端可能会订阅的信息;- (1)接受来自客户的网络连接;
- (2)订阅其它客户端发布的消息;- (2)接受客户发布的应用信息;
- (3)退订或删除应用程序的消息;- (3)处理来自客户端的订阅和退订请求;
- (4)断开与服务器连接。- (4)向订阅的客户转发应用程序消息。

设计原则:

①精简,不添加可有可无的功能;

②发布/订阅(Pub/Sub)模式,方便消息在传感器之间传递,解耦Client/Server模式,带来的好处在于不必预先知道对方的存在(ip/port),不必同时运行;

③允许用户动态创建主题(不需要预先创建主题),零运维成本;

④把传输量降到最低以提高传输效率;

⑤把低带宽、高延迟、不稳定的网络等因素考虑在内;

⑥支持连续的会话保持和控制(心跳);

⑦理解客户端计算能力可能很低;

⑧提供服务质量( quality of service level:QoS)管理

⑨不强求传输数据的类型与格式,保持灵活性(指的是应用层业务数据)。

MQTT应用领域:

①物联网M2M通信,物联网大数据采集

②Android消息推送,WEB消息推送

③移动即时消息,例如Facebook Messenger

②智能硬件、智能家居、智能电器

⑤车联网通信,电动车站桩采集

⑥智慧城市、远程医疗、远程教育

⑦电力、石油与能源等行业市场

 MQTT协议相关概念

MQTT协议中的方法

- (1)CONNECT:客户端连接到服务器- (9)SUBACK:订阅确认
- (2)CONNACK:连接确认- (10)UNSUBSCRIBE:取消订阅
- (3)PUBLISH:发布消息- (11)UNSUBACK:取消订阅确认
- (4)PUBACK:发布确认- (12)PINGREQ:客户端发送心跳
- (5)PUBREC:发布的消息已接收- (13)PINGRESP:服务端心跳响应
- (6)PUBREL:发布的消息已释放- (14)DISCONNECT:断开连接
- (7)PUBCOMP:发布完成- (15)AUTH:认证
- (8)SUBSCRIBE:订阅请求

消息服务质量QOS

 MQTT 协议中规定了消息服务质量(Quality of Service),它保证了在不同的网络环境下消息传递的可靠性,QoS 的设计是 MQTT 协议里的重点。

MQTT 设计了 3 个 QoS 等级。

- QoS 0:消息最多传递一次。

- QoS 1:消息传递至少 1 次。

- QoS 2:消息仅传送一次。

QoS0:"至多一次",消息发布完全依赖底层TCP/IP网络。会发生消息丢失。一个消息不会被接收端应答,也不会被发送者存储并再发送。这个也被叫做“即发即弃” 

QoS1:"至少一次",确保消息到达,但消息重复可能会发生。发送者将会存储发送的信息直到发送者收到一次来自接收者的PUBACK格式的应答。

QoS2:"只有一次",确保消息到达一次。如果接收端接收到了一个QoS为2的PUBLISH消息,它将相应地处理PUBLISH消息,并通过PUBREC消息向发送方确认。

PUBLISH:发布消息 PUBREC:发布收到 PUBREL:发布释放 PUBCOMP:发布完成

 发送订阅不同QOS情况下是如何生效的

topic通配符匹配规则 

 

物联网级消息中间件EMQ 

EMQ X Broker 是基于高并发的 Erlang/OTP 语言平台开发,支持百万级连接和分布式集群架构,发布订阅模式的开源 MQTT 消息服务器。

EMQ官网:https://www.emqx.cn/

为什么选择EMQ X ?从支持 MQTT5.0、稳定性、扩展性、集群能力等方面考虑,EMQX 的表现应该是最好的。

EMQX的特点

  • EMQ X 目前为开源社区中最流行的 MQTT 消息中间件;

  • EMQ X 是开源社区中第一个支持 5.0协议规范的消息服务器,并且完全兼容 MQTT V3.1 和 V3.1.1 协议。

  • 除了 MQTT 协议之外,EMQ X 还支持MQTT-SN、CoAP、 LwM2M、LoRaWAN 和 WebSocket 等物联网协议

  • 单机支持百万连接,集群支持千万级连接;毫秒级消息转发。

  • 易于安装和使用;

  • 中国本地的技术支持服务;

  • 扩展模块和插件,EMQ X 提供了灵活的扩展机制,支持企业的一些定制场景;

  • 桥接

  • 共享订阅

docker运行

docker run -tid --name emqx -p 1883:1883 -p 8083:8083 -p 8081:8081 -p 8883:8883 -p 8084:8084 -p 18083:18083  emqx/emqx:v4.1.0

 EMQDashboard

EMQ X 提供了 Dashboard 以方便用户管理设备与监控相关指标。通过 Dashboard可以查看服务器基本信息、负载情况和统计数据,可以查看某个客户端的连接状态等信息甚至断开其连接,也可以动态加载和卸载指定插件。

访问地址 http://192.168.100.100:18083 来查看Dashboard,**默认用户名是 admin,密码是 public*

客户端调试工具MQTTX

 MQTT X 是 EMQ 开源的一款优雅的跨平台 MQTT 5.0 桌面客户端,它支持 macOS, Linux, Windows。

MQTT X 的 UI 采用了聊天界面形式,简化了页面操作逻辑,用户可以快速创建连接,允许保存多个客户端,方便用户快速测试 MQTT/MQTTS 连接,及 MQTT 消息的订阅和发布。

延迟消息

 EMQ X 的延迟发布功能可以实现按照用户配置的时间间隔延迟发布 PUBLISH 报文的功能。模块开启emqx_mod_delayed

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

$delayed/{DelayInterval}/{TopicName}

-delayed:使用delayed 作为主题前缀的消息都将被视为需要延迟发布的消息。

- {DelayInterval}: 指定该 MQTT 消息延迟发布的时间间隔,单位是秒,允许的最大间隔是 4294967 秒。

- {TopicName}: MQTT 消息的主题名称。

1.在Websocket上订阅主题:t2/a

2.在Websocket上发布消息主题:topic:  $delayed/10/t2/a

共享订阅

 不带群组的共享订阅

格式:

$queue/{TopicName}

带群组的共享订阅

格式:

$share/<group-name>/{TopicName}

开源分布式LOT平台:

 https://gitee.com/pnoker/iot-dc3

文档地址:  https://doc.dc3.site/

 

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

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

相关文章

Js中数组的实用语法

1. 循环 a. 循环项 const arr [1, 2, 3];for (let item of arr) {console.log(item); } // 输出&#xff1a;1 2 3b. 循环键 const arr [1, 2, 3];for (let key in arr) {console.log(key); } // 输出&#xff1a;0 1 2c. 循环键值对 const arr [1, 2, 3];arr.forEach((…

Mysql数据库 19.Mysql 锁

MySQL锁 锁&#xff1a;锁是计算机用以协调多个进程间并发访问同一共享资源的一种机制&#xff0c;在数据库中&#xff0c;除传统的计算资源&#xff08;CPU、RAM、I/O&#xff09;的争用以外&#xff0c;数据也是一种供许多用户共享的资源&#xff0c;如何保证数据并发访问的一…

SpringBoot 自动装配原理---源码详解

目录 SpringBoot 自动装配原理源码流程详解&#xff1a;流程总结&#xff1a;条件匹配解释&#xff1a;其他解释&#xff1a; SpringBoot 自动装配原理 源码流程详解&#xff1a; 1、先看启动类&#xff0c;启动这个main方法&#xff0c;然后调用这个run方法。 2、把 启动类作…

南京邮电大学数据库实验二

1. 用create database命令创建电影数据库(MovieDB)。 create database MovieDB; 在创建表之前需调用一下指定的数据库&#xff1a; use MovieDB; 2.在电影数据库中用create table 命令创建如下5个关系模式&#xff1a; 创建movies表&#xff1a; create table Movies( ti…

城市货车通行码二维码解析

目录 说明 界面 下载 城市货车通行码二维码解析 说明 二维码扫描信息为&#xff1a; tmri://12123?ywlx1041&ewmeyJ0eHpiaCI6IjUxMDcwMDAwMDE0MyIsInR4em1jIjoiQeivgSIsImhwemwiOiIwMiIsImhwaG0iOiLlt51CMkwzMjYiLCJrc3JxIjoiMjAyMS0xMS0yOCIsImpzcnEiOiIyMDIyLTEyL…

虚幻学习笔记12—C++类的实例化

一、前言 本系列如无特殊说明使用的虚幻版本都是5.2.1&#xff0c;VS为2022版本。在Unity中通常创建的脚本都默认继承了MonoBehavior&#xff0c;都是不能再用代码New而实例化的&#xff0c;虚幻也是一样不能直接New来实例化。在Unity中是通过Instantiate方法来实例化一个游戏对…

C++ lambda表达式

写法格式 lambda表达式的写法格式如下&#xff1a; [capture-list] (parameters) mutable -> ret { statement } 各部分的说明为&#xff1a;[capture-list] : 捕获列表&#xff0c;编译器根据[]来判断接下来的代码是否为lambda函数&#xff0c;捕捉列表能够捕捉上下文中…

【ArcGIS Pro微课1000例】0055:Pro中如何处理个人数据库(.mdb)

文章目录 原因分析解决方案使用ArcGIS Pro的用户应该已经发现个人地理数据库(.mdb)不能使用了。随着ESRI的软件技术革新,在ArcGIS Pro中不再支持且将来也不会支持个人地理数据库(.mdb)。这个确实很烦人,很多项目还是在使用mdb数据库的。不过ESRI也给出了一些解决办法,不…

二叉搜索树的简单C++类实现

二叉搜索树&#xff08;BST&#xff09;是一种重要的数据结构&#xff0c;它对于理解树的操作和算法至关重要。本文将通过一个C示例来展示如何实现一个BST&#xff0c;并在插入和删除节点时提供清晰的输出&#xff0c;以帮助可视化这些操作的过程。 二叉搜索树的节点结构 首先…

Elasticsearch 8.9 search命令执行查询源码

一、相关的API的handler1、接收HTTP请求的handler2、往数据节点发送查询请求的action(TransportSearchAction)3、通过transportService把查询请求发送到指定的数据节点 二、数据节点收到请求的处理逻辑1、尝试从缓存中加载查询结果2、不通过缓存查询&#xff0c;直接执行查询(1…

Elasitcsearch--解决CPU使用率升高

原文网址&#xff1a;Elasitcsearch--解决CPU使用率升高_IT利刃出鞘的博客-CSDN博客 简介 本文介绍如何解决ES导致的CPU使用率升高的问题。 问题描述 线上环境 Elasticsearch CPU 使用率飙升常见问题如下&#xff1a; Elasticsearch 使用线程池来管理并发操作的 CPU 资源。…

智慧农业大数据可视化UI,数据展示平台(免费可视化大屏模版PS资料)

大屏幕展示方式可以实现信息的直观呈现与交互操作&#xff0c;使农业生产者能够一目了然地掌握有关农情、天气、土壤等数据信息&#xff0c;从而科学决策。智慧农业大数据可视化大屏是提升农业生产效益的一种重要工具。 现分享亩产效益指标、农业大数据可视化、农业数据展示平…

QEMU源码全解析 —— virtio(11)

接前一篇文章&#xff1a; 上一回对于virtio_balloon_pci_realize函数进行了详细解析。最后讲到在virtio_balloon_pci_realize函数的最后一步调用了object_property_set函数&#xff0c;从而导致了virtio_device_realize函数的执行。本回就来对于virtio_device_realize函数进行…

Flutter工具安装与环境搭建

1、下载 Flutter SDK&#xff0c;下载完成后&#xff0c;在需要放置SDK的地方解压即可。 注意&#xff1a; 请勿将 Flutter 有特殊字符或空格的路径下。请勿将 Flutter 安装在需要高权限的文件夹内&#xff0c;例如 C:\Program Files\。 2、配置环境变量 例如&#xff1a; …

NO-IOT翻频,什么是翻频,电信为什么翻频

1.1 翻频迁移最终的目的就是减少网络的相互干扰&#xff0c;提供使用质量. 1.2 随着与日俱增的网络规模的扩大&#xff0c;网内干扰已成了影响网络的质量标准之一&#xff0c;为了保障电信上网体验&#xff0c;满足用户日益增长的网速需求,更好的服务客户&#xff0c;电信针对…

【迅搜09】索引管理(二)增删改操作

索引管理&#xff08;二&#xff09;增删改操作 今天我们来学习真正的&#xff0c;最核心的索引管理相关的操作。但其实今天的内容还更简单一些&#xff0c;为啥呢&#xff1f;因为索引管理中&#xff0c;最核心的就是对于数据的增、删、改呀。其实要往大了说&#xff0c;查询也…

缓存的定义及重要知识点

文章目录 缓存的意义缓存的定义缓存原理缓存的基本思想缓存的优势缓存的代价 缓存的重要知识点 缓存的意义 在互联网高访问量的前提下&#xff0c;缓存的使用&#xff0c;是提升系统性能、改善用户体验的唯一解决之道。 缓存的定义 缓存最初的含义&#xff0c;是指用于加速 …

宝塔PostgreSQL设置数据库远程访问

宝塔PostgreSQL设置数据库远程访问 宝塔的PostgreSQL1. 添加数据库2. 打开PostgreSQL设置界面3. 修改配置4. 重载配置/重启数据库 Docker的PostgreSQL1. postgresql.conf2. pg_hba.conf3. 重启数据库 注意其他问题 宝塔PostgreSQL设置数据库远程访问&#xff1f;docker容器Post…

CleanMyMac X2024(Mac优化清理工具)v4.14.5中文版

CleanMyMac X是一款颇受欢迎的专业清理软件&#xff0c;拥有十多项强大的功能&#xff0c;可以进行系统清理、清空废纸篓、清除大旧型文件、程序卸载、除恶意软件、系统维护等等&#xff0c;并且这款清理软件操作简易&#xff0c;非常好上手&#xff0c;特别适用于那些刚入手苹…

《每天一个Linux命令》 -- (15) mkdir命令

欢迎阅读《每天一个Linux命令》系列 &#xff01;在本篇文章中&#xff0c;将说明mkdir命令用法。 概念 mkdir命令是Linux系统下的目录创建命令&#xff0c;用于创建指定的目录。 英文原意&#xff1a;make directories&#xff0c;所在路径&#xff1a;/bin/mkdir&#xff0…