欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

Linux下MQTT服务Mosquitto搭建

程序员文章站 2022-06-22 19:22:31
MQTT学习笔记前言在学习阿里物联平台过程中,发现主流都推荐使用mqtt方式实现设备与平台间的通信.特整理了下mqtt服务的搭建,方便理解.Mosquitto是一个实现了MQTT3.1协议的代理服务器,由MQTT协议创始人之一的Andy Stanford-Clark开发,它为我们提供了非常棒的轻量级数据交换的解决方案。本文的主旨在于记录Mosquitto服务的安装和使用,以备日后查阅。若初次接触MQTT协议,可先理解以下概念:【MQTT协议特点】——相比于RESTful架构的物联网系统,MQTT...

MQTT学习笔记
前言
在学习阿里物联平台过程中,发现主流都推荐使用mqtt方式实现设备与平台间的通信.
特整理了下mqtt服务的搭建,方便理解.

Mosquitto是一个实现了MQTT3.1协议的代理服务器,由MQTT协议创始人之一的Andy Stanford-Clark开发,它为我们提供了非常棒的轻量级数据交换的解决方案。本文的主旨在于记录Mosquitto服务的安装和使用,以备日后查阅。

若初次接触MQTT协议,可先理解以下概念:
【MQTT协议特点】——相比于RESTful架构的物联网系统,MQTT协议借助消息推送功能,可以更好地实现远程控制。
【MQTT协议角色】——在RESTful架构的物联网系统,包含两个角色客户端和服务器端,而在MQTT协议中包括发布者,代理器(服务器)和订阅者。
【MQTT协议消息】——MQTT中的消息可理解为发布者和订阅者交换的内容(负载),这些消息包含具体的内容,可以被订阅者使用。
【MQTT协议主题】——MQTT中的主题可理解为相同类型或相似类型的消息集合。

安装
从http://mosquitto.org/files/source/下载 Linux 版本 mosquitto-1.5.1.tar.gz
tar -zxvf mosquitto-1.5.1.tar.gz 习惯解压到/usr/local/目录下
cd /usr/local/mosquitto
编译并安装 
make && make install
完成之后会在系统命令行里发现mosquitto、mosquitto_passwd、mosquitto_pub和mosquitto_sub四个工具,分别用于启动服务、管理密码、发布消息和订阅消息。

测试
1 配置文件:/etc/mosquitto/mosquitto.conf
禁止匿名用户登录  allow_anonymous false
指定用户密码文件:password_file /etc/mosquitto/pwfile.example

2 创建测试用户
创建用户admin: mosquitto_passwd -c /etc/mosquitto/pwfile.example admin
创建用户mosquitto: mosquitto_passwd -c /etc/mosquitto/pwfile.example mosquitto

3 指定配置文件并后台启动 
mosquitto -c /etc/mosquitto/mosquitto.conf -d

4 订阅主题:
mosquitto_sub -h localhost -u mosquitto -P mosquitto -p 1884 -t test
-P为密码,
-p为端口.端口默认为1883,可以在配置文件里指定 
-t 为topic
5 启动另一个终端发布主题并发布信息:
mosquitto_pub -t test -u mosquitto -P mosquitto -p 1884 -m “hello world”
这时候会在订阅终端看到订阅的消息
测试成功.

问题记录
1、报错./mosquitto_sub: error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory
解决:执行以下命令:
sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1
ldconfig

2 遇到报用户密码不对的时候,请确认是否有正确添加用户,同时检查连接的端口是否是你配置的.

附录
mosquitto_sub选项:
-d, –debug :开启debug选项
-f, –file:把一个文件的内容做为消息的内容发送。经测试,支持txt文件,不支持doc等其他形式文件。
-h, –host:说明所连接到的域名,默认是localhost
-i, –id:客户端的ID号,如果没有指定,默认是mosquitto_pub_加上客户端的进程id,不能和–id_prefix同时使用。
-I, –id-prefix :指定客户端ID的前缀,与客户端的进程ID连接组成客户端的ID,不能和–id同时使用。
-l, –stdin-line:从总段读取输入发送消息,一行为一条消息,空白行不会被发送。
-m, –message:从命令行发送一条消息,-m后面跟发送的消息内容。
-n, –null-message:发送一条空消息。
-p, –port:连接的端口号,默认是1883.
-P, –pw:指定密码用于代理认证,使用此选项时必须有有效的用户名。
-q, –qos:指定消息的服务质量,可以为0,1,2,默认是0.
–quiet:如果指定该选项,则不会有任何错误被打印,当然,这排除了无效的用户输入所引起的错误消息。
-r, –retain:如果指定该选项,该条消息将被保留做为最后一条收到的消息。下一个订阅消息者将能至少收到该条消息。
-s, –stdin-file:从标准输入接收传输的消息内容,所有输入做为一条消息发送。
-t, –topic:指定消息所发布到哪个主题。
-u, –username:指定用户名用于代理认证。
–will-payload:如果指定该选项,则万一客户端意外和代理服务器断开,则该消息将被保留在服务端并发送出去,该选项必须同时用–will-topic指定主题。
–will-qos:指定Will的服务质量,默认是0.必须和选项 –will-topic同时使用.
–will-retain:如果指定该选项,则万一客户端意外断开,已被发送的消息将被当做retained消息。必须和选项 –will-topic同时使用.
–will-topic:指定客户端意外断开时,Will消息发送到的主题。

mosquitto_pub 选项:
命令:
mosquitto_sub 订阅到主题,接收到消息时打印
选项:
-c, –disable-clean-session:禁止’clean session’选项,即如果客户端断开连接,这个订阅仍然保留来接收随后到的QoS为1和2的消息,当改客户端重新连接之后,它将接收到已排在队列中的消息。建议使用此选项时,客户端id选项设为–id
-d, –debug:开启debug选项
-h, –host:说明所连接到的域名,默认是localhost
-i, –id:客户端的ID号,如果没有指定,默认是mosquitto_pub_加上客户端的进程id,不能和–id_prefix同时使用。
-I, –id-prefix:指定客户端ID的前缀,与客户端的进程ID连接组成客户端的ID,不能喝–id同时使用。
-k, –keepalive:给代理发送PING命令(目的在于告知代理该客户端连接保持且在正常工作)的间隔时间,默认是60s
-p, –port:说明客户端连接到的端口,默认是1883
-P, –pw:指定密码用于代理认证,使用此选项时必须有有效的用户名。
-q, –qos:指定消息的服务质量,可以为0,1,2,默认是0.
–quiet:如果指定该选项,则不会有任何错误被打印,当然,这排除了无效的用户输入所引起的错误消息。
-t, –topic:指定订阅的消息主题,允许同时订阅到多个主题
-u, –username:指定用户名用于代理认证。
-v, –verbose:冗长地打印收到的消息。若指定该选项,打印消息时前面会打印主题名——“主题 消息内容”,否则,只打印消息内容
–will-payload:如果指定该选项,则万一客户端意外和代理服务器断开,则该消息将被保留在服务端并发送出去,该选项必须同时用–will-topic指定主题。
–will-qos:指定Will的服务质量,默认是0.必须和选项 –will-topic同时使用.
–will-retain:如果指定该选项,则万一客户端意外断开,已被发送的消息将被当做retained消息。必须和选项 –will-topic同时使用.
–will-topic:指定客户端意外断开时,Will消息发送到的主题。

本文地址:https://blog.csdn.net/gdutllf2006/article/details/108589209

相关标签: 智能控制 linux