想象一下连接远程客户端的MQTT代理,它连续发送QoS 2数据 - 标准情况 . 客户端配置为“cleansession false” - 它们有一个队列,以便在连接失败时发送消息 .
在服务器上,本地客户端订阅主题以接收消息 .
服务器负载:
启动MQTT Broker
运行本地客户端
连接远程客户端并从队列接收数据
如果第三点出现在第二点之前怎么办?有标准解决方案吗?如何不丢失第一条消息?
假设您正在讨论代理的所有后续重新启动,而不是第一次启动系统,那么代理应该在关闭之前将客户端的持久预订状态存储到磁盘,并在重新启动时将其恢复 . 这意味着它应该为本地客户端排队消息 .
此外,您始终可以使用防火墙来阻止远程客户端连接,直到所有本地客户端都已启动,这也将解决第一个启动问题 .
1 回答
假设您正在讨论代理的所有后续重新启动,而不是第一次启动系统,那么代理应该在关闭之前将客户端的持久预订状态存储到磁盘,并在重新启动时将其恢复 . 这意味着它应该为本地客户端排队消息 .
此外,您始终可以使用防火墙来阻止远程客户端连接,直到所有本地客户端都已启动,这也将解决第一个启动问题 .