Linux教程:MQTT入门基础概念与学习介绍及服务部署搭建并使用桌面工具进行测试开发

news2025/1/16 21:21:54

前言:

----在2023年的今天,智能家居与智能家电的兴起犹如滚滚长江迅速袭来,智能终端设备也不断出现在人们的视野当中,实现远程控制,其中必然不能缺少终端与终端,终端与服务之间的交互,如何来解决这一难题呢,接下来我们就来讲解消息传输协议(MQTT)是如何连接万物互联的通讯桥梁。

一、MQTT介绍

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网小型设备、移动应用等方面有较广泛的应用。

在这里插入图片描述

二、为何选择MQTT

----MQTT是基于TCP长连接,首先是先跟MQTT服务器建立TCP连接,然后发送登录请求,要保持长连接,定时发心跳包跟服务保持连接。这使其非常适合硬件性能低下的远程设备以及网络状况糟糕的情况下传输数据。

MQTT特点:

  1. 使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。

  2. 二进制形式编码,小型化传输,协议开销较小,极大降低网络开销。

  3. 三种消息发布服务质量(Qos):至多一次、至少一次、只有一次。

  4. 采用心跳机制,通过间断性的发送报文,来维持客户端和服务端的心跳长连接,以减少电量的消耗,提升系统资源利用率。

    *发布/订阅模型为客户提供了彼此独立的存在,增强了整个系统的可靠性。当一个客户端出现故障时,整个系统可以继续正常工作。
    

三、为什么不选择其他众多网络协议

----在以往我们服务与服务之间交互通常采用HTTP/HTTPS请求响应等方式完成,为何不继续采用请求响应,原因有以下几点:

  • HTTP 是一种同步协议。客户端需要等待服务器响应。Web 浏览器具有这样的要求,但它的代价是牺牲了可伸缩性。在 IoT 领域,大量设备以及很可能不可靠或高延迟的网络使得同步通信成为问题。异步消息协议更适合 IoT 应用程序。传感器发送读数,让网络确定将其传送到目标设备和服务的最佳路线和时间。
  • HTTP 是单向的。客户端必须发起连接。在 IoT 应用程序中,设备或传感器通常是客户端,这意味着它们无法被动地接收来自网络的命令。
  • HTTP 是一种 1-1 协议。客户端发出请求,服务器进行响应。将消息传送到网络上的所有设备上,不但很困难,而且成本很高,而这是 IoT 应用程序中的一种常见使用情况。
  • HTTP 是一种有许多标头和规则的重量级协议。它不适合受限的网络。

四、MQTT 跟传统的消息队列相比,有哪些区别

----MQTT是一种消息队列遥测传输协议,但并非说他就是消息队列,常用的消息队列有RabbitMQ Kafka RocketMQ等,两者适用场景不一样,绝大部分 MQTT Broker 不保证消息顺序(Queue),常用于物联网、消息传输等。

两者区别:

  • 在传统消息队列中,在发送消息之前,必须先创建相应的队列;在 MQTT 中,不需要预先创建要发布的主题(可订阅的 Topic)
  • 在传统消息队列中,未被消费的消息总是会被保存在某个队列中,直到有一个消费者将其消费;在 MQTT中,如果发布一个没有被任何客户端订阅的消息,这个消息将被直接扔掉
  • 在传统消息队列中,一个消息只能被一个客户端获取,在 MQTT 中,一个消息可以被多个订阅者获取,MQTT 协议也不支持指定消息被单一的客户端获取。

五、MQTT主题

----在MQTT当中,消息是没有消息队列这一概念,那它是怎么隔离区分各种繁杂的消息呢,这里就涉及到 主题 概念,不同的主题可被不同的订阅者订阅,发布者可以发布不同的主题消息,从而将消息进行一个隔离区分。MQTT 协议规定主题是 UTF-8 编码的字符串。

命名规则:

  • 所有的主题名必须至少包含一个字符
  • 主题名是大小写敏感的。ACCOUNTS 和 Accounts 是不同的主题名
  • 主题名可以包含空格字符。Accounts payable 是合法的主题名
  • 主题名以前置或后置斜杠 / 区分。/finance 和 finance 是不同的
  • 只包含斜杠 / 的主题名是合法的
  • 主题名不能包含 null 字符(Unicode U+0000)

MQTT 主题通配符包含单层通配符 “+” 及多层通配符 “#”,主要用于客户端一次订阅多个主题。

  • 单层通配符

     如客户端订阅AAA/+/CCC主题消息,则会收到AAA/1/CCC,AAA/2/CCC,…,AAA/N/CCC主题消息
    
  • 多层通配符

     如客户端订阅AAA/#主题消息,则会收到AAA,AAA/BBB,AAA/BBB/CCC主题消息
    
  • 以$开头的主题为系统主题

***注意:通配符只能用于订阅,不能用于发布。

六、Linux环境搭建服务

---- EMQX 是一款全球下载量超千万的开源物联网 MQTT 服务器,单集群支持 1 亿物联网设备连接,消息分发时延低于 1 毫秒,助力企业构建关键业务的 IoT 平台与应用。

本章主要介绍Centos7系统搭建,依次执行以下命令:

1、curl -s https://assets.emqx.com/scripts/install-emqx-rpm.sh | sudo bash
2、yum install emqx
3、systemctl start emqx

查看运行状态:systemctl status emqx

在这里插入图片描述

	*如果遇到openssl问题,请先更新openssl,命令如下:
	
	1、yum install -y epel-release
	2、yum install -y openssl11 openssl11-devel

七、常见端口与控制台

  • 1883 MQTT TCP 协议端口
  • 8883 MQTT/TCP SSL 端口
  • 8083 MQTT/WebSocket 端口
  • 8084 MQTT/WebSocket with SSL 端口
  • 8080 MQTT执行引擎HTTP API 端口
  • 18083 EMQX Dashboard 管理控制台端口

浏览器输入:http://localhost:18083/,访问控制台页面,账号admin/public

在这里插入图片描述

八、使用Windows桌面软件工具

----MQTT X 是一个强大的跨平台 MQTT 5.0 桌面和 CLI 客户端,使学习、探索和开发 MQTT 变得快速而简单。

此图为作者测试所截:

在这里插入图片描述

好了,今天的教程就到这里了,下一章节我们来讲解如何在SpringBoot项目中对接mqtt服务,实现订阅和发布,希望大家多多关注(首席摸鱼师 微信同号)支持哦~

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

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

相关文章

ag-Grid Enterprise

ag-Grid Enterprise Ag-Grid被描述为一种商业产品,已在EULA下分发,它非常先进,性能就像Row分组一样,还有范围选择、master和case、行的服务器端模型等等。 ag Grid Enterprise的巨大特点: 它具有以下功能和属性&#x…

Docker调用Intel集显实现FFmpeg硬解码

文章目录Docker调用Intel集显实现FFmpeg硬解码参考FFmpeg 集成qsv方式一 容器完成所有步骤方式二 容器完成部分步骤方式三 dockerfile部署Docker调用Intel集显实现FFmpeg硬解码 参考 ffmpeg_qsv_docker拉取该镜像可以实现FFmpeg集成vaapi的硬加速,通过dockerfile文…

什么是特权访问管理(PAM)

特权访问管理 (PAM) 是指一组 IT 安全管理原则,可帮助企业隔离和管理特权访问、管理特权帐户和凭据、控制谁可以获得对哪些端点的管理访问权限级别,并监视用户对该访问权限执行的操作。 什么是特权访问 特权访问是一种 IT 系统访…

2023.2.10学习记录Docker容器

Docker 必须跑在Linux内核上 镜像是一个轻量级可执行的独立软件包 新建一个docker容器只需要几秒钟 Docker常用命令 启动类命令 镜像命令 容器命令 docker images docker search --limit 5 redis docker pull redis:6.0.8 docker system df 查看镜像/容器/…

使用QT中的绘画工具与定时器工具实现简易时钟

需求&#xff1a;使用QT中的绘画工具与定时器工具实现简易时钟代码实现过程&#xff1a;widget.h#ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QPainter> //引入画家类 #include<QPaintEvent> //引入绘制事件类 #include&l…

vue-router 源码解析(三)-实现路由守卫

文章目录基本使用导语初始化路由守卫useCallbacks 发布订阅模式管理路由守卫push 开始导航resolve返回路由记录匹配结果navigate 开始守卫抽取路由记录guardToPromiseFn 用Promise包装守卫方法extractComponentsGuards 从组件中抽取守卫beforeRouteLeave 守卫收集composition 守…

error: failed to push some refs to ... 就这篇,一定帮你解决

目录 一、问题产生原因 二、解决办法 三、如果还是出问题&#xff0c;怎么办&#xff1f;&#xff08;必杀&#xff09; 一、问题产生原因 当你直接在github上在线修改了代码&#xff0c;或者是直接向某个库中添加文件&#xff0c;但是没有对本地库同步&#xff0c;接着你想…

【数据结构初阶】第三节.顺序表详讲

文章目录 前言 一、顺序表的概念 二、顺序表功能接口概览 三、顺序表基本功能的实现 四、四大功能 1、增加数据 1.1 头插法&#xff1a; 1.2 尾插法 1.3 指定下标插入 2、删除数据 2.1 头删 2.2 尾删 2.3 指定下标删除 2.4 删除首次出现的指定元素 3、查找数据…

JAVA-线程池技术

目录 概念 什么是线程&#xff1f; 什么是线程池&#xff1f; 线程池出现背景 线程池原理图 JAVA提供线程池 线程池参数 如果本篇博客对您有一定的帮助&#xff0c;大家记得留言点赞收藏哦。 概念 什么是线程&#xff1f; 是操作系统能够进行运算调度的最小单位。&am…

ChatGPT的解释

概念 ChatGPT&#xff0c;美国OpenAI研发的聊天机器人程序,于2022年11月30日发布。ChatGPT是人工智能技术驱动的自然 语言处理工具&#xff0c;它能够通过学习和理解人类的语言来进行对话&#xff0c;还能根据聊天的上下文进行互动&#xff0c;真正像人 类一样来聊天交流&am…

干货 | PCB拼板,那几条很讲究的规则!

拼板指的是将一张张小的PCB板让厂家直接给拼做成一整块。一、为什么要拼板呢&#xff0c;也就是说拼板的好处是什么&#xff1f;1.为了满足生产的需求。有些PCB板太小&#xff0c;不满足做夹具的要求&#xff0c;所以需要拼在一起进行生产。2.提高SMT贴片的焊接效率。只需要过一…

如何使用python画一个爱心

1 问题 如何使用python画一个爱心。 2 方法 桌面新建一个文本文档&#xff0c;文件后缀改为.py&#xff0c;输入相关代码ctrls保存&#xff0c;关闭&#xff0c;最后双击运行。 代码清单 1 from turtle import * def curvemove(): for i in range(200): right(1) …

Vue2笔记03 脚手架(项目结构),常用属性配置,ToDoList(本地存储,组件通信)

Vue脚手架 vue-cli 向下兼容可以选择较高版本 初始化 全局安装脚手架 npm install -g vue/cli 创建项目&#xff1a;切换到项目所在目录 vue create xxx 按照指引选择vue版本 创建成功 根据指引依次输入上面指令即可运行项目 也可使用vue ui在界面上完成创建&…

Python学习-----无序序列2.0(集合的创建、添加、删除以及运算)

目录 前言&#xff1a; 什么是集合 集合的三大特性 1.集合的创建 &#xff08;1&#xff09;直接创建 &#xff08;2&#xff09;强制转换 2.集合的添加 &#xff08;1&#xff09;add&#xff08;&#xff09;函数 &#xff08;2&#xff09;update() 函数 3.集合元…

澳大利亚访问学者申请流程总结

澳大利亚访问学者申请需要注意些什么&#xff1f;下面知识人网小编整理澳大利亚访问学者申请流程总结。1、取得wsk英语成绩&#xff0c;现在都是先买票再上车了。2、联系外导&#xff0c;申请意向接收函(email)。3、向留学基金委CSC提出申请。4、获批后&#xff0c;申请正式邀请…

Python 循环语句

Python的循环语句&#xff0c;程序在一般情况下是按顺序执行的。编程语言提供了各种控制结构&#xff0c;允许更复杂的执行路径。循环语句允许我们执行一个语句或语句组多次&#xff0c;下面是在大多数编程语言中的循环语句的一般形式&#xff1a;Python 提供了 for 循环和 whi…

【C++】类与对象理解和学习(上)

专栏放在【C知识总结】&#xff0c;会持续更新&#xff0c;期待支持&#x1f339;类是什么&#xff1f;类是对对象进行描述的&#xff0c;是一个模型一样的东西&#xff0c;限定了类有哪些成员&#xff0c;定义出一个类并没有分配实际的内存空间来存储它&#xff08;实例化后才…

视觉感知(二):车位线检测

1. 简介 本期为大家带来车位线检测相关知识点,以及算法工程落地的全流程演示。车位线检测是自动泊车领域必不可缺的一环,顾名思义就是采用环视鱼眼相机对路面上的车位线进行检测,从而识别出车位进行泊车。 较为常规的做法是使用四颗鱼眼相机环视拼接然后在鸟瞰图上做停车位…

如何利用状态机编程实现启保停控制(含Stateflow模型介绍)

状态机的介绍这里不再赘述,概念也很简单没有过多的复杂理论。下面我们直接给出具体实现过程。有限自动状态机详细讲解请参看下面的文章链接: PLC面向对象编程系列之有限状态机(FSM)详解_RXXW_Dor的博客-CSDN博客_有限状态机 plc实现编写PLC控制机器动作类程序时,当分支比较…

【自然语言处理】主题建模:BERTopic(实战篇)

主题建模&#xff1a;BERTopic&#xff08;实战篇&#xff09;BERTopic 是基于深度学习的一种主题建模方法。201820182018 年底&#xff0c;Devlinetal.Devlin\ et\ al.Devlin et al. 提出了 Bidirectional Encoder Representations from Transformers (BERT)[1]^{[1]}[1]。BER…