当前位置: 首页 > news >正文

如何在 Ubuntu 上安装 Mosquitto MQTT 代理

如何在 Ubuntu 上安装 Mosquitto MQTT 代理

Mosquitto 是一个开源的消息代理,实现了消息队列遥测传输 (MQTT) 协议。在 Ubuntu 22.04 上安装 MQTT 代理,您可以利用 MQTT 轻量级的 TCP/IP 消息平台,该平台专为资源有限的物联网 (IoT) 设备设计,例如带宽低或电池寿命短的设备。Mosquitto 依赖于发布-订阅 (pub/sub) 拓扑结构,发布者将消息发送到代理,订阅者通过频道接收消息。

简介

Mosquitto 是一个轻量级、开源的消息代理,实现了 MQTT(消息队列遥测传输)和 MQTTv5 协议。它被广泛应用于物联网 (IoT)、传感器网络、移动应用、嵌入式系统等需要轻量级实时数据交换的场景。

主要特点:

  • 轻量高效: Mosquitto 占用资源少,非常适合在资源受限的设备上运行。
  • 开源免费: 基于 Eclipse Public License v2.0 许可证发布,可以免费使用和修改。
  • 支持 MQTT 和 MQTTv5: 兼容 MQTT 协议的多个版本,提供更丰富的功能和更好的性能。
  • 易于安装和配置: 提供简单的安装包和配置文件,方便快速部署。
  • 支持多种客户端: 提供 C、Python、Java 等多种语言的客户端库,方便与各种应用集成。
  • 灵活的主题订阅: 支持通配符和主题层次结构,方便灵活地订阅和发布消息。
  • 多种身份验证机制: 支持用户名/密码、TLS/SSL 加密等多种身份验证方式,保障数据安全。
  • 消息持久化: 可以将消息持久化到磁盘,防止消息丢失。
  • 桥接功能: 可以桥接多个 Mosquitto 代理,实现分布式消息传递。

准备工作

服务器准备

必要前提:

  • 一个充满求知欲的大脑。
  • 一台 Linux 服务器(推荐腾讯云、阿里云或雨云等)。本文将以雨云为例进行演示。

我将以 雨云 为例,带大家创建一台自己的云服务器,以便尝试本篇文章的内容。

注册链接: https://rainyun.ivwv.site

创建雨云服务器

以下步骤仅供参考,请根据实际需求选择配置。

点击 云产品云服务器立即购买

https://img-blog.csdnimg.cn/img_convert/6d1cfac48988a60f6430bf29b897ae00.png

选择距离你较近的区域,以保证低延迟。

https://img-blog.csdnimg.cn/img_convert/4c16271f125adea69da6ed9e7b2a4226.png

按照自己需求选择配置。

https://img-blog.csdnimg.cn/img_convert/fa69fed3142baf010a15ed36163d2215.png

选择 Ubuntu 22.04 版本。

https://img-blog.csdnimg.cn/img_convert/f6611351f576daf28d27eee3938aa3f5.png

最后点击 立即购买,并按照提示进行购买。购买后等待机器部署完毕,点击购买的服务器,进入管理面板,找到远程连接相关信息。

https://img-blog.csdnimg.cn/img_convert/5e84cffc9a748ee6080badd4f4a27091.png

https://img-blog.csdnimg.cn/img_convert/414570cd3da48d4cc4bf51489992000b.png

使用 PowerShell 进行远程连接。

https://img-blog.csdnimg.cn/img_convert/c8afbeb764459a37a8451dd2ed8eeff1.png

输入 ssh root@你的服务器IP 例如 ssh root@154.9.227.239 回车后,首次需要输入 yes,再次回车后即可登录服务器。

https://img-blog.csdnimg.cn/img_convert/16bf1d681ae7fd3663ceb797b087d39e.png

到此为止,我们的云服务器就创建好了。

开始安装

Mosquitto 在 Ubuntu 22.04 的默认软件包仓库中可用。按照以下步骤在 Ubuntu 22.04 上安装 MQTT 代理。

  1. 安装 Mosquitto 软件包。

    sudo apt install -y mosquitto
    
  2. 验证新的 Mosquitto 版本。

    输出:

    1730087147: mosquitto version 2.0.18 starting
    1730087147: Using default config.
    1730087147: Starting in local only mode. Connections will only be possible from clients running on this machine.
    1730087147: Create a configuration file which defines a listener to allow remote access.
    

管理 Mosquitto 系统服务

Mosquitto 在 mosquitto 下作为系统服务运行。按照以下步骤使用 systemctl 命令管理服务。

  1. 查看 mosquitto 服务状态并验证其是否处于活动状态。

    sudo systemctl status mosquitto
    

    输出:

    ● mosquitto.service - Mosquitto MQTT BrokerLoaded: loaded (/usr/lib/systemd/system/mosquitto.service; enabled; preset: enabled)Active: active (running) since Fri 2024-10-25 06:51:37 UTC; 12min agoDocs: man:mosquitto.conf(5)man:mosquitto(8)
    ...
    
  2. 停止 mosquitto 服务。

    sudo systemctl stop mosquitto
    
  3. 启动 mosquitto 服务。

    sudo systemctl start mosquitto
    
  4. 重启 mosquitto 服务。

    sudo systemctl restart mosquitto
    

安装并测试 Mosquitto 客户端

发布者和订阅者可以使用 Mosquitto 命令行界面连接到 Mosquitto 服务器并交换消息。按照以下步骤安装软件包。

  1. 安装 mosquitto-clients 软件包。

    sudo apt install -y mosquitto-clients
    
  2. 订阅主题,例如 home/sensor/temperature,通过以下命令作为后台进程运行。

    mosquitto_sub -t "home/sensor/temperature" &
    

    输出:

    23.5
    
  3. home/sensor/temperature 主题发布新消息,并将值设置为 30.5

    mosquitto_pub -t "home/sensor/temperature" -m "30.5" -q 1 -r
    

    输出:

    30.5
    30.5
    
  4. 发布另一条消息,并将值设置为 45.2

    mosquitto_pub -t "home/sensor/temperature" -m "45.2" -q 1 -r
    

    输出:

    45.2
    45.2
    
  5. 查看所有活动的后台作业,并记录 mosquitto_sub 作业 ID。

    输出:

    [1]   Running                 mosquitto_sub -t "home/lights/sitting_room" &
    
  6. 通过指定 ID 停止作业。

    输出:

    [1]   Done                    mosquitto_sub -t "home/lights/sitting_room" &
    

保护 Mosquitto 服务器

默认情况下,Mosquitto 允许客户端无需任何形式的身份验证即可连接。按照以下步骤启用基于密码的身份验证,要求客户端使用用户名和密码连接。

  1. /etc/mosquitto/conf.d 目录中创建一个新的 default.conf 配置文件。

    sudo nano /etc/mosquitto/conf.d/default.conf
    
  2. /etc/mosquitto/conf.d/default.conf 文件中添加以下配置,以禁用匿名连接并允许 Mosquitto 读取 /etc/mosquitto/passwd 凭据文件。

    allow_anonymous false
    password_file /etc/mosquitto/passwd
    

    保存并关闭文件。

  3. 打开 /etc/mosquitto/passwd 认证文件。

    sudo nano /etc/mosquitto/passwd
    
  4. 在文件中添加以下用户凭据。将 EXAMPLE_PASSWORDSTRONG_PASSWORD 替换为您希望的值。

    john_doe:EXAMPLE_PASSWORD
    mary_smith:STRONG_PASSWORD
    

    保存并关闭文件。

  5. 使用 mosquitto_passwd 工具加密明文用户密码。

    sudo mosquitto_passwd -U /etc/mosquitto/passwd
    
  6. 查看 /etc/mosquitto/passwd 文件以验证您已加密密码。

    sudo cat /etc/mosquitto/passwd
    

    输出:

    john_doe:$6$TSzNycsj...5Qyvgd4g==
    mary_smith:$6$DtlKf1lG.../rLHIL0Q==
    
  7. 重启 mosquitto 服务以应用配置更改。

    sudo systemctl restart mosquitto
    
  8. 使用有效的用户名和密码订阅 /home/sensor/temperature 主题。例如,john_doeEXAMPLE_PASSWORD

    mosquitto_sub -u john_doe -P EXAMPLE_PASSWORD -t "/home/sensor/temperature"
    
  9. /home/sensor/temperature 主题发布新消息。

    mosquitto_pub -u john_doe -P EXAMPLE_PASSWORD -t "home/sensor/temperature" -m "22.5" -q 1 -r
    

    输出:

    22.5
    
  10. 查看所有活动的后台作业,并记录 mosquitto_sub 作业 ID。

    输出:

    [1]   Running                 mosquitto_sub -u john_doe -P EXAMPLE_PASSWORD -t "home/lights/sitting_room" &
    
  11. 通过指定作业 ID 停止主题。

    输出:

    [1]   Done                    mosquitto_sub -u john_doe -P EXAMPLE_PASSWORD -t "home/lights/sitting_room" &
    
  12. 使用错误的凭据尝试订阅 /home/sensor/temperature 主题

    mosquitto_pub -u john_doe -P VERY_WRONG_PASSWORD -t "home/sensor/temperature" -m "22.5" -q 1 -r
    

    输出:

    Connection error: Connection Refused: not authorised.
    Error: The connection was refused.
    

    上述输出显示连接失败,因为 Mosquitto 无法授权用户。

相关链接
雨云 - 新一代云服务提供商: https://www.rainyun.com/NTEzMTM1_?s=blog
面试鸭:https://mianshiya.com/?shareCode=sq29yv
我的博客:https://blog.ivwv.site

相关文章:

如何在 Ubuntu 上安装 Mosquitto MQTT 代理

如何在 Ubuntu 上安装 Mosquitto MQTT 代理 Mosquitto 是一个开源的消息代理,实现了消息队列遥测传输 (MQTT) 协议。在 Ubuntu 22.04 上安装 MQTT 代理,您可以利用 MQTT 轻量级的 TCP/IP 消息平台,该平台专为资源有限的物联网 (IoT) 设备设计…...

css使用弹性盒,让每个子元素平均等分父元素的4/1大小

css使用弹性盒,让每个子元素平均等分父元素的4/1大小 原本: ul {padding: 0;width: 100%;background-color: rgb(74, 80, 62);display: flex;justify-content: space-between;flex-wrap: wrap;li {/* 每个占4/1 */overflow: hidden;background-color: r…...

设计模式的学习思路

学习设计模式确实需要一定的时间和实践,尤其是对于刚入门的人来说,因为一开始可能会感到有些混淆,尤其是当多个设计模式看起来有相似之处时。本博客是博主学习设计模式的思路历程,大家可以一起学习进步。设计模式学习-CSDN博客 1…...

stereopy 查看 data.tl 的可用属性

为了查看 data.tl 的可用属性,您可以使用 Python 的内置函数,例如 dir() 或 vars(),具体操作如下: 1. 列出 data.tl 的所有属性 使用 dir() 来查看所有可用的属性和方法: # 列出所有属性 print(dir(data.tl))这将返回一个列表,包含所有可用的方法、属性和内部字段。 2.…...

【2024APMCM亚太杯A题】详细解题思路

A题 复杂场景下的水下图像增强研究 解题思路问题一图像统计分析技术一、检测 偏色 的技术二、检测 弱光 的技术三、检测 模糊 的技术 聚类算法 问题二问题三问题四完整论文与代码 解题思路 问题一 问题 1:请使用类似上文提到的图像统计分析技术,对附件 …...

用 React18 构建Tic-Tac-Toe(井字棋)游戏

下面是一个完整的 Tic-Tac-Toe(井字棋)游戏的实现,用 React 构建。包括核心逻辑和组件分离,支持两人对战。 1. 初始化 React 项目: npx create-react-app tic-tac-toe cd tic-tac-toe2.文件结构 src/ ├── App.js…...

数据结构及算法--排序篇

在 C 语言中,可以通过嵌套循环和比较运算符来实现常见的排序算法,比如冒泡排序、选择排序或插入排序 目录 基础算法: 1.冒泡排序(Bubble Sort) 2.选择排序(Selection Sort) 3.插入排序&…...

泷羽sec学习打卡-网络七层杀伤链1

声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 关于蓝队基础的那些事儿-Base1 基本的企业网络架构是怎样的呢?高层管理IT管理影子IT中央技术…...

【QT】绘图

个人主页~ 绘图 一、绘图1、基础内容2、绘制形状(1)线段(2)矩形(3)圆形(4)文本(5)画笔(6)画刷 3、绘制图片(1)…...

vue3+elementui-plus el-dialog全局配置点击空白处不关闭弹窗

在与main.ts同级下的plugins文件夹(如果没有,新建一个)下建一个element.js文件(名字随便取) element.js文件内容如下: import ElementPlus from element-plus export default (app) > {console.log(app…...

Markdown语法说明

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…...

推荐一款专业电脑护眼工具:CareUEyes Pro

CareUEyes Pro是一款非常好用的专业电脑护眼工具,软件小巧,界面简单,它可以自动过滤电脑屏幕的蓝光,让屏幕显示更加的不伤眼,更加舒适,有效保护你的眼睛,可以自定义调节屏幕的色调,从…...

对subprocess启动的子进程使用VSCode python debugger

文章目录 1 情况概要(和文件结构)2 具体设置和启动步骤2.1 具体配置Step 1 针对attach debugger到子进程Step 2 针对子进程的暂停(可选) Step 3 判断哪个进程id是需要的子进程 2.2 启动步骤和过程 3 其他问题解决3.13.2 ptrace: Operation not permitted…...

Django启用国际化支持(2)—实现界面内切换语言:activate()

文章目录 ⭐注意⭐1. 配置项目全局设置:启用国际化2. 编写视图函数3. 配置路由4. 界面演示5、扩展自动识别并切换到当前语言设置语言并保存到Session设置语言并保存到 Cookie ⭐注意⭐ 以下操作依赖于 Django 项目的国际化支持。如果你不清楚如何启用国际化功能&am…...

基于单片机的多功能跑步机控制系统

本设计基于单片机的一种多功能跑步机控制系统。该系统以STM32单片机为主控制器,由七个电路模块组成,分别是:单片机模块、电机控制模块、心率检测模块、音乐播放模块、液晶显示模块、语音控制模块、电源模块。其中,单片机模块是整个…...

VSCode 如何选中包含某个字母的所有行

文章目录 写在前面一、需求描述二、解决方法参考链接 写在前面 自己的测试环境:VSCode 一、需求描述 由于需要处理文件,需求是删除文件中包含某个字母的所有行。 二、解决方法 在 Visual Studio Code (VSCode) 中,如果你想选中所有包含某…...

CSRF保护--laravel进阶篇

laravel对csrf非常重视,专门针对csrf作出了很多的保护。如果您是刚刚接触laravel的路由不久,那么您可能对于web.php路由文件的post请求很疑惑,因为get请求很顺利,而post请求则可能会遭遇失败。其中一个失败的原因是由于laravel的c…...

计算机网络-理论部分(二):应用层

网络应用体系结构 Client-Server客户-服务器体系结构:如Web,FTP,Telnet等Peer-Peer:点对点P2P结构,如BitTorrent 应用层协议定义了: 交换的报文类型,请求or响应报文类型的语法字段的含义如何…...

k8s1.31版本最新版本集群使用容器镜像仓库Harbor

虚拟机 rocky9.4 linux master node01 node02 已部署k8s集群版本 1.31 方法 一 使用容器部署harbor (1) wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo yum -y install docker-ce systemctl enable docker…...

QT中使用json格式存取矩阵数据

在 Qt 中,可以通过 QJsonDocument 和 QJsonArray 方便地存取 JSON 格式的矩阵数据。以下是存储和读取矩阵数据的完整实现示例。 1. 矩阵存储为 JSON 将矩阵(QVector<QVector<double>> 或其他二维数组)存储为 JSON 文件。 实现代码 #include <QJsonArray&g…...

k8s 集群安装

安装rockylinux https://www.jianshu.com/p/a5fe20318b8e https://www.cnblogs.com/haoee/p/18290506 配置VirtualBox双网卡 https://www.cnblogs.com/ShineLeBlog/p/17580311.html https://zhuanlan.zhihu.com/p/341328334 https://blog.csdn.net/qq_36544785/article/deta…...

Elasticsearch面试内容整理-核心概念与数据模型

在 Elasticsearch 中,理解核心概念与数据模型是非常重要的,因为它们定义了数据如何被组织、存储和搜索。以下是 Elasticsearch 的核心概念和数据模型的详细介绍。 核心概念 集群(Cluster) ● 集群是由一个或多个节点组成的,用于共同存储和搜索数据的集合。...

Spring Boot实现License生成和校验

Spring Boot实现License生成和校验 证书准备 # 1. 生成私钥库 # validity&#xff1a;私钥的有效期&#xff08;天&#xff09; # alias&#xff1a;私钥别称 # keystore&#xff1a;私钥库文件名称&#xff08;生成在当前目录&#xff09; # storepass&#xff1a;私钥库密码…...

es写入磁盘的过程以及相关优化

数据写入到内存buffer同时写入到数据到translog buffer,这是为了防止数据不会丢失每隔1s数据从buffer中refresh到FileSystemCache中,生成segment文件,这是因为写入磁盘的过程相对耗时,借助FileSystemCache,一旦生成segment文件,就能通过索引查询到了refresh完,memory bu…...

十大网络安全事件

一、私有云平台遭攻击&#xff0c;美国数千家公司工资难以发放 1月&#xff0c;专门提供劳动力与人力资本管理解决方案的美国克罗诺斯&#xff08;Kronos&#xff09;公司私有云平台遭勒索软件攻击&#xff0c;事件造成的混乱在数百万人中蔓延。 克罗诺斯母公司UKG集团&#xf…...

【数据结构】【线性表】栈的基本概念(附c语言源码)

栈的基本概念 讲基本概念还是回到数据结构的三要素&#xff1a;逻辑结构&#xff0c;物理结构和数据运算。 从逻辑结构来讲&#xff0c;栈的各个数据元素之间是通过是一对一的线性连接&#xff0c;因此栈也是属于线性表的一种从物理结构来说&#xff0c;栈可以是顺序存储和顺…...

修改ffmpeg实现https-flv内容加密

目录 1 前言 2 ffmpeg源码修改 2.1 增加头文件 2.2 http上下文增加解密密钥和AVAESCTR结构体 2.3 aes解密上下文初始化 2.4 对http数据部分解密 2.5 http关闭时清理资源 3 ffmpeg使用 1 前言 当前视频拉流已经通过URL鉴权方式来对访客身份进行识别和过滤&#xff0c;但…...

react中useMemo的使用场景

useMemo 是 React 的一个 Hook&#xff0c;用来优化性能&#xff0c;尤其是在计算复杂值时。它会记住&#xff08;缓存&#xff09;计算结果&#xff0c;只有在依赖项变化时才重新计算&#xff0c;避免不必要的重复计算。 import React, { useMemo } from react; function Ex…...

Pytorch自定义算子反向传播

文章目录 自定义一个线性函数算子如何实现反向传播 有关 自定义算子的实现前面已经提到&#xff0c;可以参考。本文讲述自定义算子如何前向推理反向传播进行模型训练。 自定义一个线性函数算子 线性函数 Y X W T B Y XW^T B YXWTB 定义输入M 个X变量&#xff0c;输出N个…...

aws服务(二)机密数据存储

在AWS&#xff08;Amazon Web Services&#xff09;中存储机密数据时&#xff0c;安全性和合规性是最重要的考虑因素。AWS 提供了多个服务和工具&#xff0c;帮助用户确保数据的安全性、机密性以及合规性。以下是一些推荐的存储机密数据的AWS服务和最佳实践&#xff1a; 一、A…...

免费建站网站一级大录像不卡在线看网页/百度搜索首页

NSObject是大多数Objective-C类的继承的根类&#xff1b;它没有父类。通过NSObject&#xff0c;其它类继承了一些基础的与Objective-C语言编译器系统之间的接口&#xff0c;并且获得了在它的实例中表现为一个对象的能力。以下是NSObject类的继承图&#xff1a; 尽管NSObject不是…...

全国招聘网站排名/seo网络推广

做realsense中手势部分的时候&#xff0c;涉及到检测手势关节旋转的部分&#xff0c;找了篇博文资料。 四元数介绍 旋转&#xff0c;应该是三种坐标变换——缩放、旋转和平移&#xff0c;中最复杂的一种了。大家应该都听过&#xff0c;有一种旋转的表示方法叫四元数。按照我们的…...

用dw做网站的空格怎么打/软文写作技巧

一、Python3中直接执行pipinstall wordcloud可以自动下载安装的依赖包&#xff0c;但是Wordcould还是无法安装出现这样子的&#xff1a; 解决办法&#xff1a; 直接去https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud下载相应的包安装就可以了 先安装wrapt‑1.10.11‑…...

颛桥做网站/如何统计网站访问量

1你在Linux下写的程序基本可以稍微修改一下就可以在windows平台上运行。2)LINUX是一个操作系统&#xff0c;是一个平台.可以在LINUX构建的平台上实现编程&#xff0c;而且编程也很方便容易.可以这么说LINUX天生不是用来编程的&#xff0c;但编程的绝佳平台是LINUX。为避免LINUX…...

镇江市住房城乡建设局网站/乐天seo视频教程

在公司做分布式深网爬虫&#xff0c;搭建了一套稳定的代理池服务&#xff0c;为上千个爬虫提供有效的代理&#xff0c;保证各个爬虫拿到的都是对应网站有效的代理IP&#xff0c;从而保证爬虫快速稳定的运行&#xff0c;当然在公司做的东西不能开源出来。不过呢&#xff0c;闲暇…...

免费建站网站一级大/企业网站建设的流程

JNDI(Java Naming and Directory Interface&#xff0c;Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来&#xff0c;使得我们可以用名称 访问对象。目录服务是一种命名服务&#xff0c;在这种服务里&#xff0c;对象不但有名称&…...