MQTT和Mosquitto背景
Mosquitto是一个开源(BSD许可证)的消息代理,实现MQTT(消息队列遥测传输)协议版本3.1。
MQTT(MQ Telemetry Transport),消息队列遥测传输协议,轻量级的发布/订阅协议,适用于一些条件比较苛刻的环境,进行低带宽、不可靠或间歇性的通信。值得一提的是mqtt提供三种不同质量的消息服务:
Qos0:“至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
Qos1:“至少一次”,确保消息到达,但消息重复可能会发生。
Qos2:“只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
Mosquitto的安装
1.准备安装包
到官网下载https://mosquitto.org/files/source/安装包,我这里下载的是当前最新:
[root@centos7x1 ~]# wget https://mosquitto.org/files/source/mosquitto-1.6.8.tar.gz
2.解压缩
[root@centos7x1 ~]# tar zxf mosquitto-1.6.8.tar.gz
3.进入目录
[root@centos7x1 ~]# cd mosquitto-1.6.8
4.编译&&安装
make && make install
5.安装完成
[root@centos7x1 ~]# mosquitto
mosquitto mosquitto_passwd mosquitto_pub mosquitto_rr mosquitto_sub
安装完成后,环境里会添加上以上几条命令。
6.配置文件
[root@centos7x1 ~]# cp /etc/mosquitto/mosquitto.conf.example /etc/mosquitto/mosquitto.conf
使用配置文件启动broker时,加入-c conf路径。例如:mosquitto -c /etc/mosquitto/mosquitto.conf -v
Mosquitto的安装可能出现的问题
1.编译时找不到openssl/opensslconf.h
openssl/opensslconf.h:没有那个文件或目录
[root@centos7x1 mosquitto-1.6.8]# yum install openssl-devel
2.编译时找不到ares.h (这个我没有碰到)
yum install c-ares-devel
3.编译时找不到uuid/uuid.h (这个我也没有碰到)
yum install e2fsprogs-devel
yum install uuid-devel
yum install libuuid-devel
4.使用时,找不到libmosquitto.so.1
mosquitto_sub: error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory
ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1
ldconfig
简单的使用测试
1、启动mosquitto(broker代理服务)
[root@centos7x1 local]# mosquitto -v
1582095853: mosquitto version 1.6.8 starting
1582095853: Using default config.
1582095853: Opening ipv4 listen socket on port 1883.
1582095853: Opening ipv6 listen socket on port 1883.
1582095853: Error: Invalid user 'mosquitto'.
-
错误:没有用户mosquitto。
-
解决:
方法1,adduser mosquitto
方法2,修改配置文件mosquitto.conf,增加登录的用户,例如root.
使用配置文件启动
#user mosquitto
user root
2、订阅主题