2013-06-27 28 views
10

Jestem nowy w JMS. Z tego co rozumiem, są zdolne do wybierania wiadomości z kolejki/tematu. Dlaczego więc potrzebujesz wiedzieć, kiedy odebrano wiadomości? Jakie jest praktyczne zastosowanie takiego ?Jaka jest różnica między MessageListener a konsumentem w JMS?

Edit: Z Javadoc of MessageListener:

MessageListener przedmiot służy do odbierania asynchronicznie dostarczane wiadomości.

Każda sesja musi upewnić się, że przekazuje wiadomości szeregowo do odbiornika . Oznacza to, że detektor przypisany do jednego lub większej liczby klientów z tej samej sesji może przyjąć, że metoda onMessage nie jest wywoływana z następną wiadomością, dopóki sesja nie zakończy ostatniego połączenia.

Jestem więc mylić między wykorzystaniem warunków asynchronicznie i seryjnie razem. W jaki sposób te dwa pojęcia odnoszą się do opisywania funkcji MessageListener?

Odpowiedz

17

Różnica polega na tym, że MessageConsumer służy do odbierania wiadomości synchronicznie:

MessageConsumer mc = s.createConsumer(queue); 
Message msg = mc.receive(); 

Asynchronous dostawy, możemy zarejestrować obiekt MessageListener z konsumentem wiadomości:

mc.setMessageListener(new MessageListener() { 
    public void onMessage(Message msg) { 
     ... 
    } 
}); 
+0

Proszę zobaczyć edycję. – Geek

+0

@Evgeniy \t W trybie AUTO_ACKNOWLEDGEMENT (niekomercyjny) Jeśli wystąpi błąd podczas wykonywania metody receive() [synchronous] lub onMessage() [aysnc], wiadomość zostanie automatycznie ponownie dostarczona? Link: http://stackoverflow.com/questions/18712399/auto-acknowledgement-modenon-transactional-receive-vs-onmessage –

9

z docs:

Dla synchronicznego odbioru, klient może zwrócić się do następnej wiadomości z wiadomości konsumenta z zastosowaniem jednego ze swoich otrzymywanych metodami.

Dla asynchroniczny dostawy, klient może zarejestrować MessageListener obiekt z konsumentem wiadomości.

+0

+1 Za link. – Santosh

2

Jedną z głównych różnic zgodnie z moją wiedzą, nie wymienioną w innych odpowiedziach, jest to, że MessageConsumer może korzystać z MessageSelectors, a zatem ma możliwość spożywania wiadomości, które go interesują, gdzie jako MessageListener będzie słuchać wszystkich wiadomości.

z samouczka J2EE doc http://docs.oracle.com/javaee/5/tutorial/doc/bnceh.html

JMS Message selektorów
Jeśli aplikacja wiadomości musi filtrować wiadomości, które otrzymuje, można użyć JMS selektora wiadomość API, który umożliwia konsumentowi wiadomość do określa komunikaty, którymi jest zainteresowany. Selektory wiadomości przydzielają pracę filtrowania wiadomości do dostawcy JMS, a nie do aplikacji.