linux下的mosquitto服务安装及使用(避坑指南)

Mosquitto是一个开源的MQTT消息代理服务器。MQTT是一个轻量级的、基于发布/订阅模式的消息传输协议。 mosquitto的安装使用比较简单,可以方便的来进行一些测试。

mosquitto介绍

Mosquitto的特点:

1. 轻量级:Mosquitto是一个轻量级的MQTT代理服务器,它的设计目标是提供高效、快速和可靠的消息传递,适用于各种规模的应用。

2. 容易部署:Mosquitto的安装和部署非常简单,可以在多个平台上运行,包括Linux、Windows、macOS等。

3. 安全性:Mosquitto支持基于TLS/SSL的加密通信,可以保护消息的安全性和机密性。同时,它还支持基于用户名和密码的身份验证,以及访问控制列表(ACL)来限制访问权限。

4. 可扩展性:Mosquitto支持多个客户端连接和多个主题的订阅,可以满足大规模应用的需求。

Ubuntu下的安装

方式一:源码安装

下载mosquitto

官网:https://mosquitto.org/

源码地址:https://mosquitto.org/files/source/mosquitto-2.0.9.tar.gz

优点是可以任意指定需要的版本。 但就是稍麻烦些,需要自己编译使用。若需要添加进服务,则也需要自己来配置。

cd /home/test
wget --no-check-certificate https://mosquitto.org/files/source/https://mosquitto.org/files/source/mosquitto-2.0.9.tar.gz

// 编译、安装
cd mosquitto-2.0.9
make
sudo make install

方式二:直接安装

优点是简单方便,只是版本不能由你自由选,不过版本应该也不会太旧,Ubuntu18下默认应该是2.0以上的版本。

sudo apt-get install mosquitto

以上默认只安装了mosquitto的服务,不带测试客户端工具mosquitto_sub和mosquitto_pub。如果需要,则可以安装:

sudo apt-get install mosquitto-clients

服务管理

service --status-all

它将显示 Ubuntu 上的完整服务列表。如过系统是 Ubuntu 18.04、Ubuntu 20.04 和 Ubuntu 22.04 版本或以上版本,建议使用Systemd systemctl 实用程序启动、停止或重新启动服务。较早的版本则可以使用 service 命令启动/停止/重启服务。

service 是一种较旧的服务管理命令,用于与 System V init 系统兼容的 Linux 发行版。它可以启动、停止、重启或查询系统服务的状态。使用 sudo service 命令时,你需要指定服务的名称,例如 sudo service apache2 stop 将停止 Apache 服务器。 sudo systemctl 是一个较新的服务管理命令,用于与 Systemd 系统兼容的 Linux 发行版,如最新版本的 Ubuntu、Fedora 和 CentOS。它提供了更多的功能和灵活性。

还有一种方式,可以使用 /etc/init.d 目录中的初始化脚本启动、停止或重新启动服务。该目录实际上包含用于不同服务的各种脚本。如使用:

/etc/init.d/mosquitto  start

自从 Ubuntu 切换到 Systemd 后,不推荐使用初始化脚本。

systemctl 启动 mosquitto 服务:

sudo systemctl stop mosquitto

停止mosquitto 服务:

sudo systemctl start mosquitto

要重新启动 mosquitto 服务:

sudo systemctl restart mosquitto

检查 mosquitto 服务状态:

sudo systemctl status mosquitto

避坑指南

安装成功并启动后,发现外网并不能成功访问到,防火墙也放行了1883端口,但是仍然无法访问到1883端口,为什么会连不上Linux上的mosquitto服务器?

原因是Ubuntu上的mosquitto服务默认是 local only mode,当使用sudo service mosquitto start,再使用sudo service mosquitto status是查看不到当前服务器是运行在哪种模式,当使用mosquitto -v这个命令时可以看到下图现象:

在这里插入图片描述

还有个更简单的方法,排查此类问题。就是查看linux系统下开放了哪些端口,端口的使用情况。

使用netstat命令,如:

netstat -ntpl

127.0.0.1 是IPv4环回地址,也称为本地回环地址。它指向本地主机的网络接口,用于在本地主机上访问自己的服务和应用程序。 这类地址开头的服务只能本机访问。0.0.0.0 是通配符地址,表示任意主机。当服务绑定到 0.0.0.0 时,它将监听所有可用的网络接口上的传入连接,意味着可以从任意地址访问该服务。在Linux下, :::::1 是IPv6环回地址的两种表示形式,用于代表本地主机。

解决办法

直接修改/etc/mosquitto目录下的mosquitto.conf文件,开放端口和允许访问的地址即可。

# 设置允许匿名连接,如果禁止匿名连接,则需要配置账号、密码连接
allow_anonymous true

# mqtt 协议配置,分为ipv4和ipv6两种,当前可以只配置启用一种
listener 1883 0.0.0.0
socket_domain ipv4
protocol mqtt

测试使用

订阅消息

# 无密码
mosquitto_sub -t test1
# 有密码
mosquitto_sub -u yang -P abc123 -t test1

发布消息

# 无密码
mosquitto_pub -t test1 -m "发布的内容"
# 有密码
mosquitto_pub -u yang -P abc123 -t test1 -m "发布的内容"

mqtt客户端下载

在windows下,常用的mqtt客户端工具为MQTTX。

工具下载地址:

MQTTX 下载

https://github.com/emqx/MQTTX/releases/latest

 密码配置

 默认安装的mosquitto未启用密码,如果正式使用最好是启用密码验证。

配置mosquitto账号密码:

# 使用-c 参数会导致清空密码文件,重新插入用户
mosquitto_passwd -c pwfile.example 用户名

# 不使用-c 表示追加用户,不影响旧用户
mosquitto_passwd  pwfile.example 用户名

经过以上配置,在linux下默认会在/etc/mosquitto/目录下生成密码的配置文件 pwfile.example。也可以指定要生成的pwfile文件路径,使用以下形式:

mosquitto_passwd /etc/mosquitto/pwfile.example 用户名

修改/etc/mosquitto目录下的mosquitto.conf文件,启用密码。

# 设置是否允许匿名连接,如果禁止匿名连接,则需要配置账号、密码连接
allow_anonymous true

# 密码文件路径,禁止匿名连接配置,允许匿名则不用配置
password_file /etc/mosquitto/pwfile.example

# mqtt 协议配置,分为ipv4和ipv6两种,当前可以只配置启用一种
listener 1883 0.0.0.0
socket_domain ipv4
protocol mqtt

# ipv6
listener 1883 ::
socket_domain ipv6
protocol mqtt

# webscoket 协议配置,如果有的话需要配置,分为ipv4和ipv6两种,当前可以只配置启用一种
listener 1884 0.0.0.0
protocol websockets
socket_domain ipv4

listener 1884 ::
protocol websockets
socket_domain ipv4

# 允许的最大连接数,-1表示没有限制
max_connections -1

最后,重启mosquitto服务,配置文件的修改才能生效。

sudo systemctl restart mosquitto

其他MQTTBroker

除了Mosquitto,还有一些其他开源免费的MQTT代理服务器可供选择。

包括但不限于以下几种:

1. Eclipse Mosquitto:Eclipse Mosquitto是Mosquitto的一个分支,它提供了更多的功能和改进,如更好的性能、更丰富的配置选项等。

2. EMQX:EMQ X是一个高性能、可扩展的MQTT和MQTT-SN代理服务器,它支持多种协议和功能,如MQTT、MQTT-SN、CoAP、LwM2M等。

3. HiveMQ:HiveMQ是一个专注于可靠性和可扩展性的MQTT代理服务器,它提供了高可用性和负载均衡等功能。

4. RabbitMQ:RabbitMQ是一个通用的消息代理服务器,它支持多种协议和消息传递模式,包括AMQP、MQTT等。

5.Aedes:Aedes是一个基于JavaScript的轻量级MQTT消息代理服务器。

更多介绍:https://www.cnblogs.com/zhaojinhui/p/16790989.html

这些MQTT代理服务器都有各自的特点和适用场景,你可以根据自己的需求选择合适的。

其他资源

Linux搭建MQTT服务器(mosquitto)并使用

Linux搭建MQTT服务器(mosquitto)并使用_linux mosquitto_码仙♥的博客-CSDN博客

百度安全验证

https://wenku.csdn.net/answer/138aada39619ea890fc382855cc37e54

mosquitto服务器搭建及配置_mosquitto 配置_胖涛的博客-CSDN博客

Mosquitto 搭建及配置_mosquitto.conf_量子物理学的博客-CSDN博客

Linux下安装Mosquitto以及开启Websockets_linux mosquitto 启动_Quite不Quiet的博客-CSDN博客

RabbitMQ介绍及部署(超详细讲解)_rabbitmq服务器_char1otte的博客-CSDN博客

RabbitMQ: easy to use,flexible messaging and streaming — RabbitMQ

如何下载安装RabbitMQ_雨会停rain的博客-CSDN博客

RabbitMQ安装部署——超详细哦~_懒羊羊夸夸~的博客-CSDN博客

小议 MQTT 物联网传输协议 - UinIO.com 电子技术博客

RabbitMQ安装部署——超详细哦~_懒羊羊夸夸~的博客-CSDN博客

Bash Shell 脚本编程实践 - UinIO.com 电子技术博客

从 GNU Make 到 CMake 快速入门 - UinIO.com 电子技术博客

nodejs快速搭建MQTT服务器_aedes mqtt_qczxl520的博客-CSDN博客

EMQX 企业版: 企业级 MQTT 物联网接入平台

MQTT服务器_鸿蒙道的博客-CSDN博客

原文地址:https://blog.csdn.net/yyz_1987/article/details/131607972

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、信号(signal)、消息队列、共享内存、信号量、套接字(socket)。管道用于具有亲缘关系的进程间通信,有名管道的每个管道具有名字,使没有亲缘关系的进程间也可以通信。信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别对整个系统的性能做统计,而进程级别则具体到进程,为每个进程维护统计信息。

按实现原理分,可分为基于计数器和跟踪以及剖析。含义如下:

计数器:内核维护的统计数据,通常为无符号整型,用于对发生的事件计数,比如,网络包接收计数器,磁
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书验证,详细追踪整个交互过程,可用于调用网络后端接口,诊断http和https网络服务故障。
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满、fd泄漏等问题。命令包括ping、fping、tcpdump、lsof、netstat、/proc/$pid/fd、du、grep、traceroute、dig。
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的进程数目,用uptime查看到负载很高,既有可能是CPU利用率高,也可能是大量在等待io的进程导致,用mpstat查看每个CPU的使用情况,查看CPU的使用率或者CPU花在等待io的时间,接着用pidstat定位具体的进程
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线程切换及中断切换,进程切换的开销较大,除了需要保存寄存器和程序计数器中的值还需保存全局变量、栈等到内存中,以便下次运行恢复,而同一进程中的线程切换开销会小很多,只需更新寄存器和线程独有的栈,共享资源如打开的文件、全局变量等无需切换,当硬件中
1.top命令 作用:该命令可以按CPU使用.内存使用和执行时间对任务进行排序,常用来监控系统中占用CPU或内存较高的程序及CPU和内存的负载。 默认视图: 当想看系统负载时,可观察汇总的%CPU中的us用户进程和sy系统进程是否占用CPU很高,相加接近100%就说明占用很高了,有些程序可能得不到及
文章浏览阅读1.8k次,点赞63次,收藏54次。Linux下的目录权限!!!粘滞位!!!超详解!!!
文章浏览阅读1.6k次,点赞44次,收藏38次。关于Qt的安装、Windows、Linux、MacBook_mack book 安装qt
本文介绍了使用shell脚本编写一个 Hello
文章浏览阅读1.5k次,点赞37次,收藏43次。【Linux】初识Linux——了解操作系统的发展历史以及初次体验Linux编程环境
文章浏览阅读3k次,点赞34次,收藏156次。Linux超详细笔记,个人学习时很认真的记录的,觉得好的麻烦点个赞。
文章浏览阅读6.8k次,点赞109次,收藏114次。【Linux】 OpenSSH_9.3p1 升级到 OpenSSH_9.5p1(亲测无问题,建议收藏)_openssh_9.5p1
文章浏览阅读3.5k次,点赞93次,收藏78次。初识Linux中的线程,理解线程的各种概念,理解进程地址空间中的页表转换,介绍pthread线程库并理解线程库!
文章浏览阅读863次。出现此问题为Linux文件权限问题,解决方案为回到引擎目录执行命令。输入用户密码后运行./UnrealEditor。_increasing per-process limit of core file size to infinity.
文章浏览阅读2.9k次。使用文本编辑器:打开CSV文件,并使用文本编辑器(如Notepad++、Sublime Text、Visual Studio Code等)来查看文件的字符编码格式。通常在编辑器的底部状态栏或设置中可以找到当前编码的显示。请注意,上述方法并非绝对准确,特别是当文件没有明确的编码标识时。因此,如果你发现CSV文件在不同的工具或方法中显示不同的编码格式,可能需要进行进一步的分析和判断,或者尝试使用不同的编码转换方法。该命令将输出文件的MIME类型和编码信息。使用命令行工具:在命令行中,你可以使用。_shell读取csv文件逐行处理
本文介绍了如何在Linux系统中升级gcc版本,以便更好地支持C++11及以上版本的新特性。通过升级gcc,可以提升编译器的功能和性能,获得更好的开发体验。详细的步骤和方法请参考原文链接。
文章浏览阅读4.4k次,点赞6次,收藏19次。Mosquitto是一个开源的MQTT消息代理服务器。MQTT是一个轻量级的、基于发布/订阅模式的消息传输协议。 mosquitto的安装使用比较简单,可以方便的来进行一些测试。_linux mosquitto
文章浏览阅读7.2k次,点赞2次,收藏12次。Linux中,用于根目录下有一个.ssh目录,保存了ssh相关的key和一些记录文件。_~/.ssh/
文章浏览阅读4.5k次,点赞5次,收藏18次。首先需要安装 snmp ,使用下面的命令进行安装安装完毕之后,使用下面的命令查看是否安装成功当命令行显示如图即为安装成功。_snmp工具