2013-02-21 64 views
7

我有一個iOS應用程序,它使用STOMP ClientRabbitMQ對話。應用程序在啓動過程中會加載很多狀態,然後通過接收STOMP上發佈的更新來保持該狀態同步。當然,如果它失去了連接,就不能再確定它是同步的,因此必須重新加載那個大的初始blob。任何類型的網絡中斷都會觸發此行爲,並使我的客戶感到難過。如何在使用STOMP連接RabbitMQ時重播遺漏的消息?

有很多大的方法來解決這個問題(我正在處理它們),但同時,我試圖使用持久隊列來解決這個問題。其思想是服務器將創建一個隊列,將其綁定到適當的主題,然後開始構建大型啓動包。完成後,它會把一切交給客戶。客戶端將使用啓動包自行設置,打開對隊列的訂閱,然後處理服務器準備就緒時發生的所有更新。同樣,如果客戶端應該斷開連接,它可以簡單地重新連接並恢復讀取它在隊列中找到的消息。

我的問題是,雖然客戶端成功接收連接後發送的消息,但如果在連接之前隊列中有消息,則不會讀取它們。同樣,如果客戶端斷開連接,當它重新連接時,它不會看到任何消息到達時的狀態。

任何人都可以建議我如何讓客戶端能夠閱讀這些丟失的消息嗎?

回答

6

事實證明,STOMP適配器正在消耗這些消息,但未能提供它們。因此,當客戶端重新連接時,它不會有任何消息等待它。

爲了解決這個問題,我將訂閱請求的「ack」設置更改爲「client」,這意味着STOMP不應該考慮在客戶端發回ACK幀之前傳遞的消息。通過適當地改變我的客戶端,即使在客戶端不在的情況下,消息也會被傳送。

相關問題