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