gpt4 book ai didi

objective-c - 使用 STOMP 连接 RabbitMQ 时如何重播错过的消息?

转载 作者:太空狗 更新时间:2023-10-30 03:37:33 24 4
gpt4 key购买 nike

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

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

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

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

最佳答案

原来发生的事情是 STOMP 适配器正在使用消息但未能传递它们。因此,当客户端重新连接时,不会有任何消息等待它。

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

关于objective-c - 使用 STOMP 连接 RabbitMQ 时如何重播错过的消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14992307/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com