Sparkplug规范-10.多MQTT服务器下的主应用状态

多MQTT服务器情况下,如果主应用与MQTT服务器失去连接,边缘节点有可能“搁浅”,这种情况下,边缘节点虽然连接MQTT服务器并正常发布信息,却不知道主应用无法收到消息。当采用多MQTT服务器时,主应用实例必须发布STATE上线消息,所有边缘节点需要订阅这个STATE消息。

主应用需要说明是不是“主”命令/控制实例,如果是,每次连接MQTT服务器时,STATE上线消息就是成功建立MQTT会话后的第一条消息。

边缘节点在多MQTT服务器网络中,可以连接任何一台MQTT服务器,连上后,边缘节点订阅主应用发布的STATE消息。由于STATE消息带有RETAIN标记,MQTT会确保最后一条STATE消息始终可用。边缘节点应该检查消息负载,确保值为“ONLINE”,如果是“OFFLINE”,表示主应用失去了与这台MQTT服务器的连接,边缘节点应该终断会话,转到下一台MQTT服务器。STATE消息的这种用法确保了主应用与一台MQTT服务器断开不会造成边缘节点“搁浅”在该MQTT服务器上。下图说明了3台MQTT服务器下STATE消息是如何使用的。

                                                                   图 7 主应用STATE消息流图

  1. 当一个边缘节点配置多台MQTT服务器时,应该订阅主应用STATE消息。边缘节点与任何一台服务器建立连接都可以,检查STATE的值,如果STATE消息负载为“OFFLINE”,边缘节点应该断开并转到下一台服务器。
  2. 启动时,主应用在MQTT CONNECT的遗嘱中配置下线消息,STATE为“OFFLINE”,RETAIN为真,然后主应用发布上线消息,STATE为“ONLINE”。
  3. 边缘节点遍历MQTT服务器表,与STATE消息为“ONLINE”的服务器建立连接。边缘节点没有收到主应用下线消息之前保持该连接。
  4. 订阅STATE主题后,主应用STATE一有变化马上就能收到通知。假如网络中断造成主应用与#2服务器连接终止,会导致MQTT服务器代表断开的主应用MQTT客户端发布下线消息给订阅者,收到主应用下线消息,边缘节点将迁移到下一台MQTT服务器。
  5. 边缘节点连接到#n服务器,服务器当前STATE为“ONLINE”,保持连接。
  6. 同时,主应用与2#服务器重新连接,主应用发布上线消息,2#服务器STATE为“ONLINE”,准备好接收新边缘连接请求。

链接:

0. 目录

9. ​​​​​Sparkplug MQTT数据和命令消息

11. SparkplugTM持久和非持久连接

猜你喜欢

转载自blog.csdn.net/xhydongda/article/details/114264206
今日推荐