PAHOJava-文件持久性

PAHOJava-文件持久性,java,mqtt,paho,Java,Mqtt,Paho,我最近开始使用paho mqtt for java和mqtt,我一直使用mqtt代理和paho客户机it self提供的持久性机制。也许我误解了(可能是这样的)mqtt上下文中的持久性概念 我们必须支持的用例如下:我们的mqtt客户端可能已经断开连接7天了(我非常怀疑这种情况是否会发生,但还可以),甚至应用程序在这7天内关闭而没有恢复连接,一旦它启动并运行,在断开连接的7天内发送所有消息 Paho客户端支持在其或代理关闭时持久化缓冲消息,并且一旦网络恢复或代理启动,将发送缓冲消息,但如果在客户端

我最近开始使用paho mqtt for java和mqtt,我一直使用mqtt代理和paho客户机it self提供的持久性机制。也许我误解了(可能是这样的)mqtt上下文中的持久性概念

我们必须支持的用例如下:我们的mqtt客户端可能已经断开连接7天了(我非常怀疑这种情况是否会发生,但还可以),甚至应用程序在这7天内关闭而没有恢复连接,一旦它启动并运行,在断开连接的7天内发送所有消息

Paho客户端支持在其或代理关闭时持久化缓冲消息,并且一旦网络恢复或代理启动,将发送缓冲消息,但如果在客户端断开连接或代理不可用时应用程序关闭,则无法发送缓冲消息


基本上,我的问题是-断开连接的缓冲消息是否有可能在paho客户端关闭并重新启动后继续存在?

规范对此没有任何规定,只是具体说明:

保留消息是设置了保留标志的正常MQTT消息 这是真的。代理将存储最后保留的消息和 该主题对应的QoS每个订阅 与保留消息的主题匹配的主题模式将 订阅后立即接收消息。仅针对每个主题 代理将存储一条保留的消息

正如您所看到的,您的客户将只获得该主题的最后一条已发布消息


这背后的一切都永远回来了

假设您使用的是
MqttDefaultFilePersistence
而不是
MemoryPersistence
模块,那么当客户端无法到达代理时,它应该对消息进行排队,这些排队的消息也应该在客户端重新启动后仍然有效


脱机缓冲是一项相对较新的功能,但它应该存在于所有当前版本中

将客户端id和清理会话设置为false将在客户端断开连接时保留代理上的所有消息


设置MaxInflight以在代理关闭时在客户端对消息进行排队。

保留的消息与排队的消息和客户端中的持久性不同是的,我使用的是
MqttDefaultFilePersistence
。这种情况下,当我停止代理并再次启动它时,工作正常——一旦代理再次启动,排队的消息就会发送到代理。但当((客户端脱机或代理关闭)&paho客户端重新启动)不起作用时。基本上,我需要离线缓冲消息,以在客户端重新启动后生存,并在客户端再次连接后发送。我会再次检查一遍,也许我遗漏了什么。你是否将clean session设置为true?它可能需要为false才能工作不,clean session当然是false,但我明天上班时会再次测试它。将通知您结果。谢谢你到目前为止的努力。我还没能让它工作。很可能我遗漏了一些mqtt概念,或者我做错了什么。我为使其正常工作而采取的步骤是:1)客户端每5秒连接一次并成功发布消息,并将消息成功删除到代理2)停止代理并等待30秒左右4)关闭应用程序5)启动代理6)启动应用程序和客户端,通过它发送消息,但并不是在经纪人破产时生产的。(我正在设置有效负载的时间戳。)