2013-02-21 7 views
7

Mam aplikację na iOS, która używa STOMP Client do rozmowy z RabbitMQ. Aplikacja ładuje wiele stanów podczas uruchamiania, a następnie synchronizuje ten stan, otrzymując aktualizacje opublikowane na STOMP. Oczywiście, jeśli straci połączenie, nie będzie już pewności, że jest zsynchronizowany, a zatem musi ponownie załadować ten duży początkowy obiekt typu blob. Każde zakłócenie sieci powoduje takie zachowanie i sprawia, że ​​moi klienci są smutni.Jak odtwarzać nieodebrane komunikaty podczas używania STOMP do połączenia z RabbitMQ?

Istnieje wiele sposobów, aby to naprawić (i pracuję nad nimi), ale w międzyczasie próbuję użyć trwałych kolejek, aby rozwiązać ten problem. Chodzi o to, aby serwer utworzył kolejkę, powiązał ją z odpowiednimi tematami, a następnie zaczął budować duży pakiet startowy. Po skończeniu przekazuje wszystko klientowi. Klient skonfiguruje się przy użyciu pakietu startowego, otworzy subskrypcję kolejki, a następnie przetworzy wszelkie aktualizacje, które miały miejsce, gdy serwer przygotowywał wszystko. Podobnie, jeśli klient powinien się rozłączyć, może po prostu ponownie nawiązać połączenie i wznowić czytanie wiadomości, które znajdzie w kolejce.

Mój problem polega na tym, że chociaż klient pomyślnie odbiera wiadomości wysłane po nawiązaniu połączenia, jeśli w kolejce były jakieś wiadomości, zanim się połączy, nie są one czytane. Podobnie, jeśli klient zostanie rozłączony, po ponownym nawiązaniu połączenia nie zobaczy żadnych wiadomości, które dotarły, gdy był nieobecny.

Czy ktoś może zasugerować, w jaki sposób mogę uzyskać klienta, aby móc odczytać te brakujące wiadomości?

Odpowiedz

6

Okazuje się, że działo się tak, że adapter STOMP zużywał wiadomości, ale ich nie dostarczał. Tak więc, gdy klient zostanie ponownie podłączony, nie będzie miał żadnych wiadomości oczekujących na to.

Aby rozwiązać problem, zmieniłem ustawienie "ack" w żądaniu subskrypcji na "klient", co oznacza, że ​​STOMP nie powinien brać pod uwagę dostarczonego komunikatu, dopóki klient nie odeśle ramki ACK. Zmieniając odpowiednio mojego klienta, wiadomości są dostarczane nawet po odejściu klienta.