我有一个 iOS 应用程序,它使用STOMP客户端 https://github.com/juretta/objc-stomp交谈RabbitMQ https://www.rabbitmq.com。应用程序在启动期间加载大量状态,然后通过接收 STOMP 上发布的更新来保持该状态同步。当然,如果它失去连接,它就无法再确定它是否同步,因此必须重新加载那个大的初始 blob。任何类型的网络中断都会触发这种行为,让我的客户感到难过。
有很多大局方法可以解决这个问题(我正在研究它们),但与此同时,我正在尝试使用持久队列来解决这个问题。这个想法是,服务器将创建一个队列,将其绑定到适当的主题,然后开始构建大型启动包。完成后,它将把一切交给客户。客户端将使用启动包进行自身设置,打开对队列的订阅,然后处理服务器准备就绪时发生的任何更新。同样,如果客户端断开连接,它可以简单地重新连接并继续读取在队列中找到的消息。
我的问题是,虽然客户端成功接收连接后发送的消息,但如果在连接之前队列中有任何消息,则不会读取它们。同样,如果客户端断开连接,当它重新连接时,它不会看到在它离开时到达的任何消息。
谁能建议我如何让客户能够阅读那些丢失的消息?
事实证明,所发生的情况是 STOMP 适配器正在使用消息,但未能传递它们。因此,当客户端重新连接时,不会有任何消息在等待。
为了解决这个问题,我将订阅请求上的“ack”设置更改为“client”,这意味着 STOMP 在客户端发回 ACK 帧之前不应考虑已传递的消息。通过适当地更改我的客户,即使客户离开后,现在也可以传递消息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)