使用 MQTT 服务重启服务器

Rebooting server with MQTT service

想象一个连接了远程客户端的 MQTT 代理,它不断发送 QoS 2 数据 - 标准情况。客户端配置为 "cleansession false" - 他们有一个队列在连接失败时发送消息。

在服务器上,本地客户端订阅主题以接收消息。

服务器负载:

  1. 启动 MQTT 代理
  2. 运行 本地客户
  3. 正在连接远程客户端并从队列中接收数据

如果第三点发生在第二点之前怎么办?有标准的解决方案吗?如何不丢失第一条消息?

假设您谈论的是代理的所有后续重启,而不是系统第一次启动,那么代理应该在关闭之前将客户端的持久订阅状态存储到磁盘,并在关闭时恢复此状态它重新启动。这意味着它应该为本地客户端排队消息。

此外,您始终可以使用防火墙来阻止远程客户端连接,直到所有本地客户端都已启动,这也可以解决首次启动问题。