objective-c – 当使用STOMP连接到RabbitMQ时,如何重放丢失的消息?

前端之家收集整理的这篇文章主要介绍了objective-c – 当使用STOMP连接到RabbitMQ时,如何重放丢失的消息?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个iOS应用程序使用 STOMP ClientRabbitMQ通信.应用程序在启动期间加载了很多状态,然后通过接收在STOMP上发布的更新来保持该状态同步.当然,如果它失去连接,它就不能再确定它是否同步,因此必须重新加载那个大的初始blob.任何类型的网络中断都会触发此行为并使我的客户感到悲伤.

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

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

任何人都可以建议我如何让客户端能够阅读那些丢失的消息?

解决方法

事实证明,发生的事情是STOMP适配器消耗了消息但未能提供消息.因此,当客户端重新连接时,它将没有任何消息等待它.

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

猜你在找的C&C++相关文章