MQTT在多linux主机的通讯实现
文章目录
环境
- 局域网主机R3600:Ubuntu20
- 局域网主机Ubuntu on VMware
- 公网主机:118.195.183.14
MQTT基础
mqtt的发布-订阅模型
mqtt的消息流
内容
准备3个linux主机,2个是局域网主机,1个为公网主机。(只有一个也可以)
角色分配为局域网主机为client,公网主机为broker,同时也作为client
安装mosquitto的broker和client
输入如下查询可以安装哪些组件
sudo apt list | grep mosquitto
sudo apt install mosquitto mosquitto-clients
在3台主机都安装上broker和client,新增如下指令说明安装ok
运行broker
上述mosquitto安装后broker就已经自动运行了,输入如下查看
ps -ef | grep mosq && netstat -tln | grep 1883
注意:如果此时再去执行mosquitto,则会提示端口被占用
发布与订阅
在公网主机开2个shell窗口,一个用于订阅消息,一个用于发布消息
拓扑结构是2个client和1个broker都在同一主机上
订阅一个主题为greeting的消息,有订阅消息到时会显示
发布主题为greeting的消息
发布与订阅(跨网络)
实际使用的拓扑结构往往时将broker运行在公网主机上,而client往往是各式各样的物联网设备。
这里实现局域网主机R3600发布消息,局域网主机vm-ubuntu和公网主机VM-0-2-ubuntu订阅消息
如下图表明多设备跨网络的mqtt的通讯成功
参考
- Documentation | Eclipse Mosquitto
- Beginners Guide To The MQTT Protocol (steves-internet-guide.com)
- How MQTT Works -Beginners Guide (steves-internet-guide.com)
- mosquitto.conf man page | Eclipse Mosquitto
- [mosquitto port 1883 already in use - Raspberry Pi Forums](https://mosquitto.org/man/mosquitto-conf-5.html)