[MQTT]Mosquitto的簡介、安裝與本機連接測試

MQTT(Message Queuing Telemetry Transport)是基於發布/訂閱模式(Publish/Subscribe)的輕量級網絡通訊協議,專用於在低帶寬、不可靠的網絡環境中傳輸數據,關於工作原理和優點如下:

1.發布/訂閱模式(Publish/Subscribe)

發布者將消息發布特定的主題(topic)到中介伺服器(broker),而訂閱者可藉由訂閱主題而從中介伺服器接收對應的數據,同時發佈者和訂閱者可相互不認識。

2.中介伺服器(Broker)

中介伺服器接收來自發布者的消息並將其轉發給訂閱者。

3.主題(Topic)

主題類似一些RSS軟體的訂閱標籤,發佈者發佈一個主題,只要有訂閱者訂閱該主題,則訂閱者即可收到這個主題的所有數據。

4.質量服務(Quality of Service,QoS)

QoS指標對應網路環境狀態,MQTT 提供不同等級的 QoS,包括 0、1 和 2,用於提供不同程度的消息傳送保證和可靠性,條列如下:

QoS 0: 最多一次交付(At most once)

數據將以最快的速度發送,不保證數據的傳遞,也不保證數據的順序,由於不進行重試,可能會出現數據丟失的情況。此等級適用於對數據傳遞要求不高的應用場景,例如傳感器數據。

QoS 1: 至少一次交付(At least once)

保證消息至少被接收一次,確保消息不會丟失,但可能會收到多次重複的消息。發送端在收到 PUBACK(發佈確認)消息後,會重新發送消息直到接收到 PUBACK。此等級適用於要求消息傳遞的可靠性高,但可以容忍重複消息的應用場景,例如命令和控制應用。

QoS 2: 僅一次交付(Exactly once)

其通過使用需要進行兩次握手確認(PUBREC 和 PUBREL)確認來實現,確保消息僅被接收一次且不會出現重複,但可能會增加延遲和帶寬消耗。此等級適用於對消息傳遞的準確性和可靠性要求最高的場景,例如金融交易和重要報警通知。

安裝:

常見的MQTT broker有Mosquitto、HiveMQ和EMQ X等等。本文採用Mosquitto來安裝和連接測試,安裝過程也相當簡單,不論在虛擬機或樹莓派(Raspberrypi 4B)的Ubuntu 22.04 LTS的環境下,皆可順利安裝。

a.首先更新和安裝本機的軟體安裝庫

sudo apt update

sudo apt upgrade

b.安裝mosquitto中介伺服器(mosquitto)和客戶端(mosquitto-clients) 

sudo apt install mosquitto mosquitto-clients

c.查看mosquitto中介伺服器(mosquitto)狀態 

sudo systemctl status mosquitto

若為active,表示mosquitto broker已順利啟動。若為inactive,則可輸入下列指令重啟broker。

sudo systemctl restart mosquitto

完成安裝並啟動broker後,可先行查看Mosquitto的日誌,日誌一般置放在/var/log/mosquitto/mosquitto.log路徑,並可用tail來查看最新log內容,結果類似圖一。

sudo tail -f /var/log/mosquitto/mosquitto.log

圖一 日誌內容
圖一 日誌內容

另外,為了讓易於解讀log中的時間訊息,可將log中的時間戳(timestamp)轉成日期/時間格式,其需將下列內容新增於/etc/mosquitto/mosquitto.conf,亦可參考影片內容操作。

# For time format
log_timestamp true
log_timestamp_format %Y-%m-%d %H:%M:%S

完成後,記得重新啟動mosquitto broker,即可顯示易於解讀的日期/時間格式

[MQTT I Mosquitto]How to Convert Timestamp to Datetime in Mosquitto log

本機連接測試:

接著為了確保發佈和訂閱是否正常運作,可在本機先行測試,以MQTT的架構而言,本機的角色同時為發佈端(publisher)、中介端(broker)和訂閱端(subscriber),流程如下,同樣可參考影片操作。

a.在本機開啟一個終端機作為發佈端

mosquitto_pub -h localhost -t sensor_1 -m “25.3C”

b.在本機開啟另一個終端機作為訂閱端

mosquitto_sub -h localhost -t sensor_1 

[MQTT I Mosquitto]How to Publish and Subscribe on Localhost

當發佈端發佈數據時,訂閱端即會顯示內容。另外,關於訂閱和發佈端的完整命令行參數,可參考下列內容。

mosquitto_pub:

-h <host>:指定 MQTT broker 的主機名或 IP 地址。
-p <port>:指定 MQTT broker 的端口號。
-t <topic>:指定要發佈的 MQTT 主題。
-m <message>:指定要發佈的消息內容。
-q <qos>:指定消息的 QoS(0、1 或 2)。
-r:指定消息是否要求保留(retain)。
-u <username>:指定用戶名(如果 broker 設置了身份驗證)。
-P <password>:指定密碼(如果 broker 設置了身份驗證)。
-i <clientid>:指定客戶端識別符。
-d:開啟調試模式,輸出更詳細的調試信息。

mosquitto_sub:

-h <host>:指定 MQTT broker 的主機名或 IP 地址。
-p <port>:指定 MQTT broker 的端口號。
-t <topic>:指定要訂閱的 MQTT 主題。
-q <qos>:指定訂閱的 QoS(0、1 或 2)。
-u <username>:指定用戶名(如果 broker 設置了身份驗證)。
-P <password>:指定密碼(如果 broker 設置了身份驗證)。
-i <clientid>:指定客戶端識別符。
-v:開啟冗長模式,顯示訂閱的消息及其相關信息。
-d:開啟調試模式,輸出更詳細的調試信息。

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

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

相关文章

MIPI CSI-2 虚拟通道

一、背景 在介绍虚拟通道之前&#xff0c;我们先描述一个场景&#xff0c;主控芯片只有 4 个 D-PHY VIN 接口&#xff0c;但是产品需要4 个以上的摄像头。 如上图所示&#xff0c;如果我们把摄像头和主控芯片直接通过 D-PHY 接口连接&#xff0c;最多只能接 4 个摄像头&#x…

【Linux】基础IO----理解缓冲区

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;理解缓冲区 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不会坚持。早安! > 专栏选自&#xff1a;Linux初阶 > 望…

Linux 系统解压缩文件

Linux系统&#xff0c;可以使用unzip命令来解压zip文件 方法如下 1. 打开终端&#xff0c;在命令行中输入以下命令来安装unzip&#xff1a; sudo apt-get install unzip 1 2. 假设你想要将zip文件解压缩到名为"target_dir"的目录中&#xff0c;在终端中切换到目标路…

ActiveMQ介绍及linux下安装ActiveMQ

ActiveMQ介绍 概述 ActiveMQ是Apache软件基金下的一个开源软件&#xff0c;它遵循JMS1.1规范&#xff08;Java Message Service&#xff09;&#xff0c;是消息队列服务&#xff0c;是面向消息中间件&#xff08;MOM&#xff09;的最终实现&#xff0c;它为企业消息传递提供高…

基于腾讯云手把手教你搭建网站全流程,2024年最新建站教程

使用腾讯云服务器搭建网站全流程&#xff0c;包括轻量应用服务器和云服务器CVM建站教程&#xff0c;轻量可以使用应用镜像一键建站&#xff0c;云服务器CVM可以通过安装宝塔面板的方式来搭建网站&#xff0c;腾讯云服务器网txyfwq.com整理使用腾讯云服务器建站教程&#xff0c;…

2011年认证杯SPSSPRO杯数学建模B题(第一阶段)生物多样性的评估全过程文档及程序

2011年认证杯SPSSPRO杯数学建模 B题 生物多样性的评估 原题再现&#xff1a; 2010 年是联合国大会确定的国际生物多样性年。保护地球上的生物多样性已经越来越被人类社会所关注&#xff0c;相关的大规模科研和考察计划也层出不穷。为了更好地建立国际交流与专家间的合作&…

sql注入技术总结

Sql注入判断数据库类型 Mysql注入 如果对应的表&#xff0c;列名爆不出来&#xff0c;可以尝试用字符转16进制转化。 相关函数&#xff1a; system_user() 系统用户名 user() 用户名 current_user 当前用户名 session_user()连接数据库的用户名 database() 数据库名 ver…

5G Frequency Bands 频率分布

连接&#xff1a;https://www.5g-networks.net/5g-technology/5g-frequency-bands/

项目5-博客系统1(准备工作+博客列表+博客详情页)

1.创建项目 导入以下依赖 2.项目介绍 使⽤SSM框架实现⼀个简单的博客系统 共5个页面 2.1 前端页面展示 2.1.1 用户登录 2.1.2 博客发表页 2.1.3 博客编辑页 2.1.4 博客列表页 2.1.5博客详情页 2.2 功能描述: ⽤⼾登录成功后, 可以查看所有⼈的博客. 点击 <<查看全⽂…

CSS基础+基本选择器和复合选择器(如果想知道CSS的基础+基本选择器和复合选择器知识点,那么只看这一篇就足够了!)

前言&#xff1a;在我们学习完了html之后&#xff0c;我们就要开始学习三大件中的第二件—CSS&#xff0c;CSS 可以控制多重网页的样式和布局&#xff0c;也就是将我们写好的html代码加上一层华丽的衣裳&#xff0c;使网页变得更加精美。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨…

uni-app如何生成骨架屏

为什么需要骨架屏&#xff1a;为了缓解用户打开程序时等待接口的焦虑情绪 1.打开微信开发者工具&#xff0c;找到模拟器中的页面信息&#xff0c;选择生成骨架屏 2.将生成的wxml代码复制到vscode&#xff0c;在index的components中新建一个vue文件&#xff0c;只需保留请求接口…

RPA实战演练UiBot6.0新食堂一楼问卷星(类似于之前的网页表单提交)

要使用RPA&#xff08;Robotic Process Automation&#xff0c;机器人流程自动化&#xff09;帮助新食堂进行调查问卷&#xff0c;我们可以结合UiBot 6.0来实施具体的计划。以下是一个大致的实战演练计划&#xff1a; 一、目标与需求分析 明确调查目标&#xff1a;了解新食堂…

CentOS7里ifcfg-eth0文件不存在解决方案/Centos7修改网络IP解决方案

Centos7网络IP地址手动设置 1、centos7没有ifcfg-eth0&#xff0c;我的centos7也没有其他博客说的什么ifcfg-ens33、ifcfg-ens32&#xff0c;然后我打开了我这里的ifcfg-eno***&#xff0c;结果发现就是centos6里的ifcfg-eth0里的网络配置。2、vim ifcfg-eno***&#xff08;按t…

34. UE5 RPG实现鼠标点击移动

在前面&#xff0c;我们实现过使用键盘按键wasd去实现控制角色的移动&#xff0c;现在&#xff0c;我们实现了InputAction按键触发&#xff0c;后面&#xff0c;实现一下通过鼠标点击地面实现角色移动。 我们将实现两种效果的切换&#xff0c;如果你点击地面快速松开&#xff0…

突破编程_前端_SVG(circle 圆形)

1 circle 元素的基本属性和用法 SVG 的 <circle> 元素用于在SVG文档中绘制圆形。它具有几个基本属性&#xff0c;允许定义圆形的大小、位置、填充颜色和边框样式。以下是 <circle> 元素的基本属性及其详细解释&#xff1a; 1.1 cx 和 cy 描述&#xff1a;这两个…

Docker容器嵌入式开发:Docker Ubuntu18.04配置mysql数据库

在 Ubuntu 18.04 操作系统中安装 MySQL 数据库的过程。下面是安装过程的详细描述&#xff1a; 首先&#xff0c;使用以下命令安装 MySQL 服务器&#xff1a; sudo apt install mysql-server系统会提示是否继续安装&#xff0c;按下 Y 键确认。 安装过程中&#xff0c;系统会…

模板进阶 | 非类型模板参数 | 类模板的特化 | 模板的分离编译 | 模板的优缺点

非类型模板参数 我们可以认为非类型模板参数就是一个常量&#xff0c;在我们的类里面我们是不能对它进行改造 为什么会有这样的场景&#xff0c;其次就是C语言那里我们一般使用什么。 场景1 #include<iostream> using namespace std;#define N 10 template<class T…

uniapp开发小程序手写板、签名、签字

可以使用这个插件进行操作 手写板-签名签字-lime-signature - DCloud 插件市场 但是目前这个插件没有vue3 setup Composition API的写法。所以对于此文档提供的可以直接使用,需要使用Composition API方式实现的,可以继续看。 因为Composition API方式,更加的简单、灵活,…

2024 CleanMyMac X 优化储存苹果电脑空间 的好帮手

在数字时代&#xff0c;我们的Mac设备承载着越来越多的重要信息和日常任务。然而&#xff0c;随着时间的推移&#xff0c;这些设备可能会变得缓慢、混乱&#xff0c;甚至充满不必要的文件。这就是CleanMyMac X发挥作用的地方。 CleanMyMac X是一款功能强大的Mac优化工具&#…

基于java+springboot+vue实现的药品管理系统(文末源码+Lw)23-297

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;药品信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行处理不能满足广…