MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,提供一对多的消息发布,解除应用程序耦合。MQTT协议是轻量、简单、开放和易于实现的。对负载内容屏蔽的消息传输。使用TCP/IP提供网络连接等。这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。
环境搭建
以我的Linux版本CentOS7.664bit
安装相关的插件软件:
1、安装gcc插件:yuminstallgcc-c++
2、安装跨平台的安装(编译)工具Cmake:yuminstallcmake
3、安装连接库openssl-devel:yuminstallopenssl-devel
下载Mosquitto
为了方便我们后维护和文件管理,可以先创建一个mqtt文件:mkdirmqtt
cd./mqtt进入刚新建的文件目录下:
下载mosquitto:wgethttp://mosquitto.org/files/source/mosquitto-1.6.8.tar.gz
解压:tar-zxvfmosquitto-1.6.8.tar.gz,解压后先不进行编译安装mosquitto。
扩展软件安装(可以不安装,不影响MQTTMosquitto使用):
1、安装c-areas
#wgethttp://c-ares.haxx.se/download/c-ares-1.10.0.tar.gz#tarxvfc-ares-1.10.0.tar.gz#cdc-ares-1.10.0#./configure#make#sudomakeinstall
2、安装lib-uuid
#yuminstalllibuuid-devel
3、安装libwebsockets
#wgethttps://github.com/warmcat/libwebsockets/archive/v1.3-chrome37-firefox30.tar.gz#tarzxvfv1.3-chrome37-firefox30.tar.gz#cdlibwebsockets-1.3-chrome37-firefox30#mkdirbuild#cdbuild#cmake..-DLIB_SUFFIX=64#makeinstall
编译安装Mosquitto
cdmosquitto-1.6.8进入mosquitto-1.6.8目录下:输入以下命令
make
sudomakeinstall
注:如果在后续步骤提示找不到libmosquitto.so.1,在/mqtt目录下输入以下指令修改一下libmosquitto.so的位置:
sudoln-s/usr/local/lib/libmosquitto.so.1/usr/lib/libmosquitto.so.1
sudoldconfig
启动测试:(这里我们可以重新打开一个新的命令窗口)
sudogroupaddmosquitto
sudouseradd-gmosquittomosquitto
程序配置:
mv/etc/mosquitto/mosquitto.conf.example/etc/mosquitto/mosquitto.conf
启动程序:
mosquitto-c/etc/mosquitto/mosquitto.conf-d
如果没有提示错误,那就说明成功了。
尝试匿名发布订阅主题(无需账号、密码)
订阅:mosquitto_sub-tmqtt
发布:mosquitto_pub-tmqtt-hlocalhost-m"hellomqtt!"
注:订阅和发布的主题要相同。
修改默认配置:
修改mosquitto.conf文件,关闭匿名登录使用。
cd./mosquitto-1.6.8进入mosquitto-1.6.8目录下:输入以下命令:
打开mosquitto.conf文件:vim/etc/mosquitto/mosquitto.conf
点击键盘“插入”进入编辑状态。
找到allow_anonymous,去掉前面的#,改为false。找到password_file配置保存用户密码的文件存放路径。按下图修改即可。
修改mosquitto.conf文件
修改后点击键盘“退出”,输入命令:“:wq!”回车保存修改。
创建自定义用户名、密码
输入命令:mosquitto_passwd-c/etc/mosquitto/pwfile.example用户名
根据提示输入密码和二次确认密码即可。
重启mosquitto让文件生效
关闭程序:kill-9$(pidofmosquitto)
运行程序:mosquitto-c/etc/mosquitto/mosquitto.conf-d
此时再用如下命令发布订阅:
订阅:mosquitto_sub-tmqtt
发布:mosquitto_pub-tmqtt-hlocalhost-m"hellomqtt!"
你会发现不能连接:Couldnotconnect:CONNECTION_REFUSED_NOT_AUTHORIZED
出现这个情况是因为修改了上述文件,不能匿名使用了。
正确订阅:mosquitto_sub-hlocalhost-ttest-u"用户名"-P"密码"
正确发布:mosquitto_pub-hlocalhost-ttest-m"测试"-u"用户名"-P"密码"
一般先启动订阅者,再启动发布者。
默认端口:1883
一般我们服务器防火墙是没有打开1883端口的,如果没有开放1883端口安全组,上面命令订阅发布在服务器本地是可以正常使用的,但不能远程连接使用。
打开防火墙中的端口1883:
打开新的服务器连接窗口输入以下命令:
添加端口:firewall-cmd--zone=public--add-port=1883/tcp--permanent
重载:firewall-cmd--reload
注:到这里你可能还不能远程连接使用
你还需在你服务器的所属云服务商(例如:阿里云、腾讯云、华为云等),登录云服务商平台,为你的服务器添加安全组,开放进出端口:1883
到此就可以了。如下图:
本地远程连接服务器订阅主题
服务器订阅主题
发布主题
#Linux##mqtt##Mosquitto#