MQTT是物联网的一种常见链路协议,它分为MQTT客户端和MQTT服务器(BROKER),MQTT设备充当了MQTT客户端的角色, 它们会连接到MQTT服务器上,然后借助MQTT服务器的转发,各设备之间可以互相通信。
部署一个轻量级的MQTT服务器在很多测试环境,或者边缘设备的内部,是一个必要的措施。
mosquitto,就是这么一个轻量级的MQTT服务器,它可以在嵌入式设备之中运行。
# 更新
apt update -y
# 安装基础依赖
apt install -y mosquitto mosquitto-clients
# 启动服务
systemctl start mosquitto
# 查看启动状态
systemctl status mosquitto
# 设置开机自启
systemctl enable mosquitto
在linux中,启动两个ssh终端,通过mqtt客户端命令,互相发送消息。
发布消息(终端1)
mosquitto_pub -h localhost -p 1883 -u admin -P 12345678 -t "/test" -m "Hello Ubuntu"
订阅消息(终端2):
mosquitto_sub -h localhost -p 1883 -u admin -P 12345678 -t '/#' -v
这时候,你可以在终端2上看到终端1发送过来的报文Hello Ubuntu
mosquitto安装完成以后,默认是无法被外部的其他设备访问的,这时候需要通过修改配置文件,允许外部访问。
匿名连接,通常用于测试环境,减少各个设备上的配置
# 编辑/etc/mosquitto/mosquitto.conf
vim /etc/mosquitto/mosquitto.conf
添加以下内容,从而被外部访问
# 绑定到所有网络接口(0.0.0.0)
listener 1883 0.0.0.0
# 允许匿名连接(仅测试用,生产环境应配置认证)
allow_anonymous true
在生产环境,处于信息安全的考虑,是不允许匿名访问,mosquitto提供了MQTT的登录认证支持。
# 编辑/etc/mosquitto/mosquitto.conf
vim /etc/mosquitto/mosquitto.conf
添加以下内容,从而被外部访问
# 绑定到所有网络接口(0.0.0.0)
listener 1883 0.0.0.0
# 使用账号连接
allow_anonymous false
password_file /etc/mosquitto/passwd
# 生成admin用户(-c 选项,表示创建新的密码文件,如果文件已存在,使用此选项会覆盖原有文件)
mosquitto_passwd -c /etc/mosquitto/passwd admin
# 生成admin用户(-c 选项,表示创建新的密码文件,如果文件已存在,使用此选项会覆盖原有文件)
systemctl restart mosquitto
在linux中,启动两个ssh终端,通过mqtt客户端命令,互相发送消息。
发布消息(终端1)
apt remove -y mosquitto mosquitto-clients
apt autoremove -y
apt purge -y mosquitto mosquitto-clients
下面提供了一键安装命令,简化安装过程
apt-get update -y && \
apt remove -y mosquitto mosquitto-clients && \
apt autoremove -y && \
apt purge -y mosquitto mosquitto-clients && \
apt install -y mosquitto mosquitto-clients && \
systemctl enable mosquitto && \
echo -e "\n# 绑定到所有网络接口\nlistener 1883 0.0.0.0\n" >> /etc/mosquitto/mosquitto.conf && \
echo -e "\n# 使用账号连接\nallow_anonymous false\npassword_file /etc/mosquitto/passwd\n" >> /etc/mosquitto/mosquitto.conf && \
mosquitto_passwd -c /etc/mosquitto/passwd admin && \
systemctl restart mosquitto