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

news/2024/11/25 21:57:07/

零、码仙励志

在路上,寻找一个继续的理由,寻找一个曾经的梦想。

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

1、安装依赖

yum install gcc-c++ cmake openssl-devel libuuid-devel c-ares-devel uuid-devel libwebsockets-devel.x86_64 libwebsockets.x86_64 -y

2、下载mosquitto

官网:https://mosquitto.org/

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

3、解压 编译 安装

tar -zxvf mosquitto-1.6.8.tar.gz
cd mosquitto-1.6.8
make
make install

之后会碰到找不到libmosquitto.so.1这个问题,修改链接路径,重新加载动态链接库

ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1
ldconfig

4、创建配置文件

cp /etc/mosquitto/mosquitto.conf.example /etc/mosquitto/mosquitto.conf
vim /etc/mosquitto/mosquitto.conf

配置文件中默认使用user mosquitto。 如果不想创建此用户,可以修改成root

192 # When run as root, drop privileges to this user and its primary
193 # group.
194 # Set to root to stay as root, but this is not recommended.
195 # If run as a non-root user, this setting has no effect.
196 # Note that on Windows this has no effect and so mosquitto should
197 # be started by the user you wish it to run as.
198 #user mosquitto
199 user root

5、启动、查看、关闭程序

# 运行程序
mosquitto -c /etc/mosquitto/mosquitto.conf -d
# ps查看
ps -aux | grep mosquitto
# 关闭程序
kill -9 $(pidof mosquitto)

6、设置用户名密码

# 我这里用户名是ycgl
mosquitto_passwd -c /etc/mosquitto/pwfile.conf ycgl
# 然后输入俩遍密码即可

编辑配置文件

vim /etc/mosquitto/mosquitto.conf

增加下面内容

646 # Defaults to true if no other security options are set. If `password_file` or
647 # `psk_file` is set, or if an authentication plugin is loaded which implements
648 # username/password or TLS-PSK checks, then `allow_anonymous` defaults to
649 # false.
650 #
651 #allow_anonymous true
652 allow_anonymous false
......
666 # See the TLS client require_certificate and use_identity_as_username options
667 # for alternative authentication options. If an auth_plugin is used as well as
668 # password_file, the auth_plugin check will be made first.
669 #password_file
670 password_file /etc/mosquitto/pwfile.conf

然后重启即可

7、查看版本

[root@localhost mosquitto]# mosquitto -v
1684388742: mosquitto version 1.6.8 starting
1684388742: Using default config.
1684388742: Opening ipv4 listen socket on port 1883.
1684388742: Error: Address already in use
[root@localhost mosquitto]# 

8、本地简单测试

mosquitto_pub 命令参数说明
-d 打印debug信息
-f 将指定文件的内容作为发送消息的内容
-h 指定要连接的域名 默认为localhost
-i 指定要给哪个clientId的用户发送消息
-I 指定给哪个clientId前缀的用户发送消息
-m 消息内容
-n 发送一个空(null)消息
-p 连接端口号
-q 指定QoS的值(0,1,2)
-t 指定topic
-u 指定broker访问用户
-P 指定broker访问密码
-V 指定MQTT协议版本
--will-payload 指定一个消息,该消息当客户端与broker意外断开连接时发出。该参数需要与--will-topic一起使用
--will-qos Will的QoS值。该参数需要与--will-topic一起使用
--will-retain 指定Will消息被当做一个retain消息(即消息被广播后,该消息被保留起来)。该参数需要与--will-topic一起使用
--will-topic 用户发送Will消息的topicmosquitto_sub 命令参数说明
-c 设定‘clean session’为无效状态,这样一直保持订阅状态,即便是已经失去连接,如果再次连接仍旧能够接收的断开期间发送的消息。
-d 打印debug信息
-h 指定要连接的域名 默认为localhost
-i 指定clientId
-I 指定clientId前缀
-k keepalive 每隔一段时间,发PING消息通知broker,仍处于连接状态。 默认为60秒。
-q 指定希望接收到QoS为什么的消息 默认QoS为0
-R 不显示陈旧的消息
-t 订阅topic
-v 打印消息
--will-payload 指定一个消息,该消息当客户端与broker意外断开连接时发出。该参数需要与--will-topic一起使用
--will-qos Will的QoS值。该参数需要与--will-topic一起使用
--will-retain 指定Will消息被当做一个retain消息(即消息被广播后,该消息被保留起来)。该参数需要与--will-topic一起使用
--will-topic 用户发送Will消息的topic

打开一个订阅者

# 无密码
mosquitto_sub -t test1
# 有密码
mosquitto_sub -u ycgl -P ycglmosquitto123 -t test1

打开一个发布者

# 无密码
mosquitto_pub -t test1 -m "发布内容"
# 有密码
mosquitto_pub -u ycgl -P ycglmosquitto123 -t test1 -m "发布内容"

相同topic的双方,发布者pub发送 “发布内容”给订阅者sub

二、安装过程中报错解决

1.mosquitto_ctrl.h:21:25: 致命错误:cjson/cJSON.h:没有那个文件或目录

解决方法:缺少cJSON库,安装cJSON库即可。

cJSON下载地址:https://github.com/arnoldlu/cJSON

我用的是这个版本:https://codeload.github.com/arnoldlu/cJSON/tar.gz/refs/tags/v1.3.2

将下载的cJSON-x.x.x.tar.gz压缩包上传到/home 文件夹中,并解压到cJSON文件夹中

cd /home
tar -zxvf cJSON-1.3.2.tar.gz
cd cJSON-1.3.2
make
make install

参考文章:

https://blog.csdn.net/doujingwei0825/article/details/129111730


http://www.ppmy.cn/news/75068.html

相关文章

HP打印機维护怎么找官方资料

关键词: “Removal and replacement” "part number" 范例 Removal and replacement A7W93 67033 Removal and replacement A7W93-67081 HP PageWide Enterprise, HP PageWide Managed - Removal and replacement: Service fluid container kit | H…

Linux之NetLink学习笔记

1.NetLink机制 NetLink是一种基于应用层跟内核态的通信机制,其特点是一种异步全双工的通信方式,支持内核态主动发起通信的机制。该机制提供了一组特殊的API接口,用户态则通过socket API调用。内核发送的数据再应用层接收后会保存在接收进程socket的缓存…

数据结构与算法之散列表详解

一、散列表概述 散列表(Hash Table)也叫哈希表,它是一种时间复杂度能够达到接近常数的数据结构,可以用来快速地存储和查找数据。散列表通过哈希函数来将键值对映射为一个索引值,然后通过这个索引值来在数组中访问对应…

【数据库】SQLServer报修表,维修表,反馈表三表连查

大家好,我是雷工! 最近参与的一个SCADA项目,客户要求增加设备维保的功能,对设备的报修,维修,反馈过程进行记录查询,进一步提升企业的信息化能力。 该过程的实现是通过创建三个表分别记录报修-维…

【0196】共享内存管理结构(shmem)之创建共享内存分配机制(Shared Memory Allocation)(2)

文章目录 1. 共享内存段(Shared Memory Segment)1.1 设置指向共享内存的基本指针2. 创建共享内存分配机制相关文章: 【0195】共享内存管理结构(shmem)之概念篇(1) 【0

Linux下安装配置maven

1.安装以及配置maven 1.1.下载maven安装包 首先需要切换到自己需要安装的目录 把配置都放到了:/root路径下 1.2.解压下载好的maven包 tar -zxvf apache-maven-3.6.0-bin.tar.gzcp -r apache-maven-3.6.0 /usr/local/1.3.配置maven环境变量 1.3.1.在环境变量中…

maven安装与配置

这里写目录标题 一、maven的下载二、配置环境变量三、setting.xml文件配置四、idea集成maven 一、maven的下载 maven官网 我准备好的maven解压即用,提取码:0221 二、配置环境变量 (1) 我的电脑 -> 属性 -> 高级系统设置 -> 环境变量 -> …

Windows本地快速搭建SFTP服务共享文件【外网访问】

文章目录 1. 搭建SFTP服务器1.1 下载 freesshd服务器软件1.3 启动SFTP服务1.4 添加用户1.5 保存所有配置 2 安装SFTP客户端FileZilla测试2.1 配置一个本地SFTP站点2.2 内网连接测试成功 3 使用cpolar内网穿透3.1 创建SFTP隧道3.2 查看在线隧道列表 4. 使用SFTP客户端&#xff0…