2012-07-26 21 views
17

Próbowałem google, ale nie udało się. Jeśli używam AUTO_ACKNOWLEDGE, a ja mam klienta klienta napisanego w Javie, kiedy jest potwierdzana wiadomość? Używam MessageListener, który zawiera metodę onMessage. Czy potwierdzenie jest wysyłane z powrotem na serwer przed onMessage lub po zakończeniu onMessage lub w innym punkcie? Z góry dziękujemy za pomoc, którą każdy może zapewnić!JMS AUTO_ACKNOWLEDGE po potwierdzeniu?

Odpowiedz

19

Proszę to sprawdzić one.

W trybie AUTO_ACKNOWLEDGE potwierdzenie jest zawsze ostatnią rzeczą, która może się wydarzyć pośrednio po zwrocie handlerka onMessage(). Klient odbierający komunikaty może uzyskać precyzyjniejszą kontrolę nad dostarczaniem gwarantowanych wiadomości, określając tryb CLIENT_ACKNOWLEDGE w sesji konsumującej.

Użycie numeru CLIENT_ACKNOWLEDGE umożliwia aplikacji kontrolę nad wysłaniem potwierdzenia. Na przykład aplikacja może potwierdzić komunikat - w ten sposób odciążając dostawcę JMS - i wykonać dalsze przetwarzanie danych reprezentowanych przez komunikat. Kluczem do tego jest metoda potwierdzenia() w obiekcie Message, jak pokazano na listingu 1.

Metoda acknowledge() informuje dostawcę JMS, że wiadomość została pomyślnie odebrana przez konsumenta. Ta metoda zgłasza wyjątek do klienta, jeśli wystąpi awaria dostawcy podczas procesu potwierdzania. Awaria dostawcy powoduje zatrzymanie komunikatu przez serwer JMS w celu ponownego dostarczenia.

+6

Co się stanie, jeśli jest wyjątek podczas przetwarzania 'onMessage()'? Czy wiadomość zostanie ponownie dostarczona, jeśli ustawiona jest opcja "AUTO_ACKNOWLEDGE"? – Geek

+2

@Geek - Jeśli w onReceive lub JMSListener zostanie zgłoszony wyjątek, potwierdzenie nie zostanie wysłane i zostanie ponownie dostarczone. – GameSalutes

+0

W przypadku odbierania wiadomości synchronicznie z AUTO_ACKNOWLEDGE, komunikat jest potwierdzany podczas wywoływania metody consumer.receive – Wecherowski

5

CLIENT_ACKNOWLEDGE
W tym trybie potwierdzenia, klient uznaje się zużywanej wiadomość poprzez wywołanie metody potwierdzić Komunikat jest.

Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE); 
... 
msg = (TextMessage) consumer.receive(); 
//acknowledge 
msg.acknowledge(); 

AUTO_ACKNOWLEDGE
W tym trybie potwierdzenia, sesja automatycznie potwierdza odbiór klienta komunikatu albo gdy sesja z powodzeniem wrócił z zaproszenia do odbioru lub gdy słuchacz wiadomość sesja wezwał do procesu wiadomość powraca.

Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE); 

source
Best example

Powiązane problemy