MQTT中的mosquitto简单使用以及订阅离线消息
要想在客户端重连时马上收到离线时的消息,必须要确保两点:1)自身的client_id缓存在了MQ服务器上。2)消息的服务质量为“至少一次”或“只有一次”。
-
缓存客户端,持久会话:启动客户端时设置客户端id和不清除客户端缓存,以接收离线消息
-
js:
const options = { clientId: 'mina/1',clean:false }; const client = mqtt.connect(host, options);
-
python:
# clean_session为False时,会在重连时收到qos>0的所有消息 client = mqtt_client.Client(client_id="printer-A", clean_session=False,transport='websockets')
-
-
订阅/发布Qos>=1的消息:在订阅或发布时可以附带服务质量(Qos)的参数设置
-
js:
client.subscribe('mobile/111', { qos: 1}); client.publish('printer/aaa', "Ok", { qos: 1})
-
python:
client.subscribe("printer/aaa", qos=1) client.publish("mobile/111", "Ok", qos=1)
-
注意clean_session=false时可以主动接收flag参数,如果为true,说明此次连接为重连,会获取存储的缓存信息(包括之前的订阅主题,但由于默认重新订阅会不断覆盖,所以不会出现重复订阅导致消息重复的问题)。
MINE MIND系列将在我的GitHub上实时更新,同时精选部分汇总于CSDN专栏
GitHub仓库:https://github.com/IcyLeaves/MINE-MIND
CSDN专栏:https://blog.csdn.net/qq_37398834/category_10975647.html