2013-02-21 2 views
7

과 대화하기 위해 STOMP Client을 사용하는 iOS 응용 프로그램이 있습니다. 응용 프로그램은 시작 중에 많은 상태를로드 한 다음 STOMP에 게시 된 업데이트를 수신하여 해당 상태를 동기화 상태로 유지합니다. 물론 연결이 끊어지면 더 이상 동기화가되지 않아 큰 초기 블롭을 다시로드해야합니다. 어떤 종류의 네트워크 중단이라도이 동작을 유발하고 고객을 슬프게 만듭니다.STOMP를 사용하여 RabbitMQ에 연결할 때 누락 된 메시지를 어떻게 재생합니까?

이 문제를 해결하기 위해 많은 그림이 있지만 그 동안 나는이 문제를 해결하기 위해 영구 대기열을 사용하려고합니다. 서버가 대기열을 만들고 해당 항목을 적절한 항목에 바인딩 한 다음 대규모 시작 번들을 작성하는 것이 아이디어입니다. 끝나면 모든 것을 클라이언트에게 넘겨 줄 것입니다. 클라이언트는 시동 번들로 자체를 설정하고 큐에 대한 구독을 연 다음 서버가 준비가되는 동안 발생한 모든 업데이트를 처리합니다. 마찬가지로 클라이언트의 연결이 끊어지면 대기열에서 찾은 메시지를 다시 읽고 다시 시작할 수 있습니다.

내 문제는 클라이언트가 연결 한 후에 보낸 메시지를 성공적으로받는 동안 연결되기 전에 큐에 메시지가 있으면 읽지 못하는 것입니다. 마찬가지로 클라이언트의 연결이 끊어지면 다시 연결될 때 클라이언트는 부재 중일 때 도착한 메시지를 볼 수 없습니다.

누구나 누락 된 메시지를 클라이언트가 읽을 수있게하는 방법을 제안 할 수 있습니까?

답변

6

STOMP 어댑터가 메시지를 소비했지만 배달하지 못했습니다. 따라서 클라이언트가 다시 연결되면 대기중인 메시지가 없습니다.

문제를 해결하기 위해 subscribe 요청의 "ack"설정을 "client"로 변경했습니다. 이는 클라이언트가 ACK 프레임을 다시 보낼 때까지 STOMP가 전달 된 메시지를 고려하지 않아야 함을 의미합니다. 내 클라이언트를 적절하게 변경하면 클라이언트가 자리를 비운 후에도 메시지가 전달됩니다.

관련 문제