如何在 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

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

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

相关文章

Webserver回顾

线程池如何工作? 从请求队列中取出request请求,然后process处理 process是处理业务代码,用于解析http请求的 如何为线程上锁 由于线程共享同一块资源,为了避免线程重复读写资源的数据安全问题 发什么信号 定义信号 信号量如…

实验室资源调度系统:基于Spring Boot的创新

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

STM32与CS创世SD NAND(贴片SD卡)结合完成FATFS文件系统移植与测试是一个涉及硬件与软件综合应用的复杂过程

一、前言 在STM32项目开发中,经常会用到存储芯片存储数据。 比如:关机时保存机器运行过程中的状态数据,上电再从存储芯片里读取数据恢复;在存储芯片里也会存放很多资源文件。比如,开机音乐,界面上的菜单图…

【在Linux世界中追寻伟大的One Piece】手写序列化与反序列化

目录 1 -> 序列化与反序列化概念 2 -> 序列化与反序列化作用和应用场景 3 -> 手写序列化与反序列化 1 -> 序列化与反序列化概念 序列化是指将对象的状态信息转换为可以存储或传输的形式的过程,通常涉及将数据结构或对象转换成字节流或字符串格式。反…

uniapp自动注册机制:easycom

传统 Vue 项目中,我们需要注册、导入组件之后才能使用组件。 uniapp 框架提供了一种组件自动注册机制,只要你在 components 文件夹下新建的组件满足 /components/组件名/组件名.vue 的命名规范,就能直接使用。 注意:组件的文件夹…

springboot基于微信小程序的停车场管理系统

摘 要 停车场管理系统是一种基于移动端的应用程序,旨在方便车主停车的事务办理。该小程序提供了便捷的停车和功能,使车主能够快速完成各项必要的手续和信息填写。旨在提供一种便捷、高效的预约停车方式,减少停车手续的时间和精力成本。通过该…

AI技术在电商行业的创新应用与未来发展

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

.NET9 - 新功能体验(一)

被微软形容为“迄今为止最高效、最现代、最安全、最智能、性能最高的.NET版本”——.NET 9已经发布有一周了,今天想和大家一起体验一下新功能。 此次.NET 9在性能、安全性和功能等方面进行了大量改进,包含了数千项的修改,今天主要和大家一起体…

【Oracle篇】SQL性能优化实战案例(从15秒优化到0.08秒)(第七篇,总共七篇)

💫《博主介绍》:✨又是一天没白过,我是奈斯,DBA一名✨ 💫《擅长领域》:✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux,也在扩展大数据方向的知识面✌️…

神经网络入门实战:(一)神经网络解决的两种问题,以及AI、机器学习、深度学习三者之间的逻辑关系

AI、机器学习、深度学习三者之间的逻辑关系: 两种问题 (1)回归问题 回归问题是指预测一个或多个连续值的任务。这些连续值可以是任意实数,比如价格、温度、分数等。 回归问题的目标通常是 找到一个函数 ,该函数可以…

深入解析TK技术下视频音频不同步的成因与解决方案

随着互联网和数字视频技术的飞速发展,音视频同步问题逐渐成为网络视频播放、直播、编辑等过程中不可忽视的技术难题。尤其是在采用TK(Transmission Keying)技术进行视频传输时,由于其特殊的时序同步要求,音视频不同步现…

豆包MarsCode算法题:最小周长巧克力板组合

问题描述 思路分析 这道题可以抽象为一个最优化问题: 问题分析 每个正方形的面积为 k ,对应的边长为 k ,周长为 4k 。给定整数 n ,我们需要找到若干正方形,使得它们的面积之和恰好等于 n: 同时尽量最小…

解析与修复vcruntime140_1.dll问题,总结四种vcruntime140_1.dll解决方法

在使用Windows系统的过程中,不少用户可能会遇到与vcruntime140_1.dll相关的问题。这个看似神秘的文件,其实在很多软件的运行中扮演着至关重要的角色。今天的这篇文章将教大家四种vcruntime140_1.dll解决方法。 一、vcruntime140_1.dll文件分析 &#xf…

WebGL进阶(九)光线

理论基础: 点光源 符合向量定义,末减初。 平行光 环境光 效果: 点光源 平行光 环境光 源码: 点光源 平行光 环境光 复盘:

【Amazon】亚马逊云科技Amazon DynamoDB 实践Amazon DynamoDB

Amazon DynamoDB 是一种完全托管的 NoSQL 数据库服务,专为高性能和可扩展性设计,特别适合需要快速响应和高吞吐量的应用场景,如移动应用、游戏、物联网和实时分析等。 工作原理 Amazon DynamoDB 在任何规模下响应时间一律达毫秒级&#xff…

【AIGC】ChatGPT提示词Prompt解析:拒绝的艺术:如何优雅地说“不“

引言 在人际交往的复杂网络中,学会优雅地拒绝是一种至关重要的社交智慧。很多人往往因为害怕伤害他人的感受,而选择敷衍、拖延或不置可否。 然而,真正的智慧在于如何用尊重和同理心传达"不"的信息。 本文将深入探讨优雅拒绝的艺术,帮助你在维护自身边界的同时,…

Java项目实战II基于微信小程序的农场驿站平台(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着移动互…

支付宝租赁小程序的优势与应用前景分析

内容概要 在这个快节奏的时代,租赁服务越来越成为大家生活中的一部分。而支付宝租赁小程序正是这个大潮流中的一颗璀璨明珠。通过简单易用的界面和强大的功能,这个小程序不仅让用户在租赁过程中获得了前所未有的便利,也为商家提供了新的商业…

Elasticsearch 中的热点以及如何使用 AutoOps 解决它们

作者:来自 Elastic Sachin Frayne 探索 Elasticsearch 中的热点以及如何使用 AutoOps 解决它。 Elasticsearch 集群中出现热点的方式有很多种。有些我们可以控制,比如吵闹的邻居,有些我们控制得较差,比如 Elasticsearch 中的分片分…

【H2O2|全栈】JS进阶知识(七)ES6(3)

目录 前言 开篇语 准备工作 递归 概念 形式 优缺点 案例 数组求和 斐波那契数列 递归查找数据 柯里化 概念 形式 什么时候使用柯里化? 多维数组扁平化 多维数组 扁平化 利用flat() 与字符串相互转化 与JSON字符串相互转化 some(),…