7

我有一个 iOS 应用程序,它使用STOMP 客户端与RabbitMQ交谈。应用程序在启动期间加载大量状态,然后通过接收在 STOMP 上发布的更新来保持该状态同步。当然,如果它失去连接,它就不能再确定它是同步的,因此必须重新加载那个大的初始 blob。任何类型的网络中断都会触发这种行为并使我的客户感到难过。

有很多大局的方法可以解决这个问题(我正在研究它们),但与此同时,我正在尝试使用持久队列来解决这个问题。这个想法是服务器将创建一个队列,将其绑定到适当的主题,然后开始构建大型启动包。完成后,它将把一切交给客户。客户端将使用启动包设置自己,打开队列订阅,然后处理服务器准备就绪时发生的任何更新。同样,如果客户端断开连接,它可以简单地重新连接并继续读取它在队列中找到的消息。

我的问题是,虽然客户端成功接收到连接后发送的消息,但如果在连接之前队列中有任何消息,则不会读取它们。同样,如果客户端断开连接,当它重新连接时,它不会看到任何在它离开时到达的消息。

谁能建议我如何让客户能够阅读那些丢失的消息?

4

1 回答 1

6

事实证明,STOMP 适配器正在使用消息但未能传递它们。因此,当客户端重新连接时,它不会有任何消息等待它。

为了解决这个问题,我将订阅请求上的“ack”设置更改为“client”,这意味着 STOMP 在客户端发回 ACK 帧之前不应该考虑消息已传递。通过适当地更改我的客户端,即使在客户端离开后,消息现在也可以传递。

于 2013-02-21T02:33:28.180 回答