①.完成MQTT服务器的搭建
②.集成MQTT到springboot后台
③.使MQTT支持WebSocket以便前端与springboot进行消息收发。
④.集成MQTT到工控机中
1.安装
mosquitto已经被加入到EPEL仓库中,添加EPEL源后可以直接通过yum安装。
sudo yum -y install epel-release
sudo yum install mosquitto
2.启停控制
控制mosquitto这个service即可。
#启动
sudo systemctl start mosquitto
#停止
sudo systemctl stop mosquitto
#重启
sudo systemctl restart mosquitto
#开机自启
sudo systemctl stop mosquitto
3. 提升安全等级
默认配置文件的位置是:/etc/mosquitto/mosquitto.conf。
(1)关闭allow_anonymous
在配置文件中去掉allow_anonymous参数前的注释符#,并将选项修改为false。
allow_anonymous false
(2)开启mqtt的websocket服务
开启后,前端或H5端可直接通过mqtt服务器与客户端及时消息通讯(如微信公众号 ——共享单车开锁)
安装的是eclipse 的镜像docker版本的可直接在mosquitto.conf添加下面的命令即可使mqtt服务器支持websocket
port 1883
listener 9001
protocol websockets
(3)设置密码
mqttroot 为用户名,输入此命令后会要求连续输入两次密码
注:第一次添加用户需用mosquitto_passwd -c,第二次则不用-c,否则会覆盖第一个用户
#mosquitto_passwd -c /etc/mosquitto/pwfile.example mqttroot
重启mosquitto后配置生效,同时pwfile.example文件中的密码转为密文存储。
(4)用户权限控制
修改用户权限 :vim /etc/mosquitto/aclfile.example
aclfile.example文件示例如下:
# 这会影响没有用户名的用户访问限制,让无用户名的客户端可以拥有订阅和发布权限
#topic read $SYS/#
#topic write $SYS/#
# 该topic只开放给“mqttroot”使用
#user mqttroot
#topic foo/bar
# This affects all clients.
#pattern write $SYS/broker/connection/%c/state
#遗嘱主题(客户端在connect的option属性中添加遗嘱message,这样当客户端异常断开时mqtt服务器会给
#订阅此topic的所有客户端发送遗嘱message),遗嘱主题在服务端检测客户端在线离线的时候用到。
#注:正常diconnect时,mqtt服务器是不会向订阅此主题的客户端推送message的。
user mqttroot
topic status/online
# 后台主题(工控机订阅)
user mqttroot
topic production/device/ipc/send/#(#通配符后面加设备号可实现一对一通讯,不加可实现一对多通讯)
# 工控机主题(后台订阅)
user mqttroot
topic production/device/ipc/rec/#(后台订阅所有工控机发回来的消息)
(3)测试效果(分别开三个xshell窗口,模拟MQTT服务器,发送者,订阅者)
给foo/bar推送消息(发送者)
订阅foo/bar的消息(订阅者)
②给springboot集成MQTT
未完待续。。。(已完成)
③.使MQTT支持WebSocket以便前端与springboot进行消息收发。
1.前端可mqtt的websocket直接与工控机通讯,这样消息不经过后台。
2.前端可使用原始的websocket与后台通讯,后台再通过mqtt与工控机通讯,通讯结果在返回给前端。
(已完成)
④.集成MQTT到工控机中
(已完成)
⑤工控机发布遗嘱主题,后台实时检测工控机在线离线。效果如下: