Linux下MQTT环境的简单应用及搭建——之Mosquitto

2023-12-28 15:04

本文主要是介绍Linux下MQTT环境的简单应用及搭建——之Mosquitto,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 前言
    • 一、ubuntu搭建mqtt服务器 | 概要
    • 二、整体架构流程 | 技术实现细节
      • 1、下载源码
      • 2、安装Mosquitto
      • 3、解压并修改配置文件
      • 4、关于Mosquitto常见的一些操作指令
      • 5、启动mosquitto
      • 6、测试mosquitto
        • 测试1:Linux多终端交互测试
        • 测试2:Linux与Windows交互测试
    • 小编有话说

前言

前文说到最近正在研究mqtt应用的相关方案,接下来可能会陆续出好几篇相关教程。
昨天,我们说完了 Windows环境下【QT编译并部署QtMqtt相关环境+跑测demo】
接下来,我们陆续来讲讲,Linux环境下MQTT的搭建。

今天我们先来讲讲 ubuntu通过消息代理直接搭建mqtt服务器。

一、ubuntu搭建mqtt服务器 | 概要

Mosquitto是一个开源的消息代理,它提供了一个服务器,用于处理发布者和订阅者之间的消息传递。它也提供了一些客户端库,可以在C,Python,Java等语言中使用,实现了MQTT (Message Queuing Telemetry Transport) 协议,以便开发人员可以在他们的应用程序中使用MQTT。

Mosquitto的主要特点有以下几点:
- 轻量级和低带宽使用:MQTT协议非常简洁,头部信息小,非常适合于网络带宽有限或者网络连接不稳定的环境。
- 发布/订阅模型:发布者可以发送消息到一个主题,订阅者可以订阅一个或多个主题来接收消息。发布者和订阅者不需要知道彼此的存在,这提供了很大的灵活性。
- QoS等级:MQTT提供了三个不同的消息传递质量等级,包括最多一次,最少一次和只有一次。
- 持久会话:如果一个客户端断开连接,Mosquitto可以保存它的订阅信息和未传送的消息,等到客户端再次连接时,再传送这些消息。
- TLS/SSL支持:Mosquitto支持TLS/SSL,可以提供安全的网络连接。
- 桥接功能:Mosquitto可以作为桥接,连接到其他MQTT服务器,这提供了很大的灵活性和扩展性。

MQTT是一个基于发布/订阅模型的协议,它需要一个中间的消息代理来接收发布者的消息,并将这些消息路由到合适的订阅者。Mosquitto就是这样一个消息代理,它可以处理这些工作,而用户只需要在应用程序中实现pub和sub。

使用类似于Mosquitto的消息代理是实现MQTT的一个好方法,但并不是唯一的方法。需要根据具体需求和资源来选择最合适的方法。

而此处,我们是针对Linux环境下搭建MQTT的方案,进行的一个分享。考虑到Mosquitto对Linux环境也是十分友好的,所以不失为一个很好的选择。

二、整体架构流程 | 技术实现细节

1、下载源码

进入官网下载源码:https://mosquitto.org/files/source/
然后通过共享文件夹分享到Linux环境下使用。当然,也可以在ubuntu中直接下载。

PS:如果有不知道如何搭建Linux和Win共享文件夹的宝子,可以移步我之前写的这个教程:
【Linux和Win 共享文件夹 搭建使用方法【超简单】+ 共享后无法出现文件夹的解决方式】

2、安装Mosquitto

在终端中执行以下命令(中间安装可能会出现要更新apt-get,根据提示执行命令即可,如出现问题请自行查阅)

# 安装mosquitto
sudo apt-get install mosquitto
# 安装客户端
sudo apt-get install mosquitto-clients
# 安装设备端
sudo apt-get install mosquitto-dev

3、解压并修改配置文件

通过终端跳转到共享文件夹下,将下载好的Mosquitto源码包进行解压。

tar -xzvf mosquitto-2.0.18.tar.gz

在这里插入图片描述

4、关于Mosquitto常见的一些操作指令

在 Linux 系统中,可以通过以下几种方式来获取 Mosquitto 服务器的具体信息。
PS: 请注意,一些命令可能需要管理员权限才能运行,你可能需要使用 sudo 命令。

  1. 版本信息:你可以通过运行以下命令来查看 Mosquitto 的版本信息:

    mosquitto -v
    
  2. 配置信息:你可以查看 Mosquitto 的配置文件来获取其配置信息。默认情况下,Mosquitto 的配置文件通常位于 /etc/mosquitto/mosquitto.conf。你可以使用 catless 命令来查看它:

    cat /etc/mosquitto/mosquitto.conf
    

    less /etc/mosquitto/mosquitto.conf
    
  3. 运行状态:你可以使用 systemctl 命令来查看 Mosquitto 的运行状态:

    systemctl status mosquitto
    

    这会显示 Mosquitto 的运行状态、启动日志等信息。
    可以通过步骤4中提示的指令,查看一下当前mosquitto的状态,如图。
    在这里插入图片描述
    看到当前Mosquitto的运行状态,并且出现一系列的运行相关信息。
    Active: active (running) 表示当前Mosquitto 运行状态正常

  4. 日志信息:你可以查看 Mosquitto 的日志文件来获取其运行日志信息。默认情况下,Mosquitto 的日志文件通常位于 /var/log/mosquitto/mosquitto.log。你可以使用 catless 命令来查看它:

    cat /var/log/mosquitto/mosquitto.log
    

    less /var/log/mosquitto/mosquitto.log
    

    如图,此处查看到MQTT监听端口为1883,以及其他Mosquitto相关的具体日志。在这里插入图片描述

5、启动mosquitto

在终端输入下面的命令,启动mosquitto

mosquitto -c /etc/mosquitto/mosquitto.conf
  1. 运行报错
    如果出现以下提示
    在这里插入图片描述
    表示你在尝试启动 Mosquitto 时遇到了一个错误,提示 “Address already in use”。
    这意味着端口 1883 已经被其他进程占用了。你可以使用以下命令来查看哪个进程正在使用这个端口:

    sudo lsof -i :1883
    

    或者

    sudo netstat -tuln | grep :1883
    

    这两个命令都会列出正在监听端口 1883 的进程。你可以根据这些信息决定是否需要停止这个进程,或者更改 Mosquitto 的配置文件使其监听不同的端口。

    • ▶运行进程是Mosquitto
      运行内容如下,则表示当前占用1883接口的正是Mosquitto ,则无需操作其他。在这里插入图片描述

    • ▶运行进程不是Mosquitto
      如果占用1883接口的是其他进程,且决定停止使用该端口的进程时,可以使用 kill 命令。
      假设上图中的进程PID 是 885,你可以使用以下命令停止它:

      sudo kill -9 885
      

      然后,再次尝试启动 Mosquitto。如果你决定更改 Mosquitto 的配置文件,你需要在 /etc/mosquitto/mosquitto.conf 文件中找到 port 配置项,更改其值,然后重新启动 Mosquitto。

6、测试mosquitto

测试1:Linux多终端交互测试

先打开一个终端作为订阅监听端,然后再开一个终端作为信息发送端
查看交互信息,测试MQTT是否能成功运行,使用mqttfx进行连接测试

  • 订阅监听端:
mosquitto_sub -t "test1"
  • 发送端:
mosquitto_pub -t "test1" -m "hello mqttfx"

若交互如图,则表示至此,Linux下的MQTT环境已经通过mosquitto搭建成功,且正常运行。
在这里插入图片描述

测试2:Linux与Windows交互测试

通过Linux终端获取Linux的IP信息,如图。

ifconfig

在这里插入图片描述

然后,在Win下打开一个支持MQTT检测的程序,此处我使用的是通信猫
具体设置如图:
在这里插入图片描述

设置步骤:
- 点击网络
- 选择MQTT
- 设置服务端IP和访问端口,此处即为Linux端IP和mosquitto端口号
- 点击启用
- 设置订阅主题和发布主题,此处测试用的"test1"
- 输入消息,并点击发布消息

至此,Linux端已经接收到win端发布的消息,表示MQTT环境不同端交互也是正常的。

小编有话说

如果项目的应用场景非常简单,或者想要完全控制消息的路由,也可以自己实现一个简单的MQTT服务器。

不过,实现一个稳定、高效和安全的MQTT服务器可能需要大量的工作,并且需要深入理解MQTT协议。

最近正在研究mqtt应用的相关方案,接下来可能会陆续出好几篇相关教程。Linux环境下的搭建还不仅如此,QT如果在Linux端使用QtMqtt库,正在码文中…

我的相关文章指路:
Windows环境下【QT编译并部署QtMqtt相关环境+跑测demo】

后期更新会把链接放上来。

感兴趣的宝子,可以点个收藏,加个关注哟~

这篇关于Linux下MQTT环境的简单应用及搭建——之Mosquitto的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/546362

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu2289(简单二分)

虽说是简单二分,但是我还是wa死了  题意:已知圆台的体积,求高度 首先要知道圆台体积怎么求:设上下底的半径分别为r1,r2,高为h,V = PI*(r1*r1+r1*r2+r2*r2)*h/3 然后以h进行二分 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#includ

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

zoj3820(树的直径的应用)

题意:在一颗树上找两个点,使得所有点到选择与其更近的一个点的距离的最大值最小。 思路:如果是选择一个点的话,那么点就是直径的中点。现在考虑两个点的情况,先求树的直径,再把直径最中间的边去掉,再求剩下的两个子树中直径的中点。 代码如下: #include <stdio.h>#include <string.h>#include <algorithm>#include <map>#

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor