2009-06-04 10 views
6

Sono nuovo di JMS e sto lavorando alla configurazione di ActiveMQ con Tomcat 6 e Spring. Ho configurato la maggior parte delle cose di base, tuttavia sono un po 'confuso con i contenitori dei listener dei messaggi forniti da Spring. Leggendo la documentazione sembra che il contenitore del listener dei messaggi sia usato per "gestire" la sottoscrizione (sto lavorando con gli argomenti), annullando l'iscrizione e consegnando il messaggio al listener. Non sono sicuro che sto pensando a questo correttamente. Se questo è il caso non vedo alcuna documentazione su come avrei più classi iscriversi allo stesso argomento utilizzando il contenitore del listener dei messaggi. Vedo che è possibile impostare la proprietà messageListener ma ciò consentirebbe solo a una classe di essere in grado di iscriversi a un argomento. Non sembra giusto creare un'altra istanza dello stesso contenitore del listener dei messaggi solo per avere un altro utente (Message Driven POJO) in ascolto dello stesso argomento.Contenitore listener messaggi JMS primaverile

Qualcuno può far luce su questo per me? Penso di poter essere un po 'confuso.

Grazie in anticipo!

risposta

0

Il contenitore è un wrapper di sorta per "adattare" qualsiasi POJO alla ricezione di messaggi da una coda o da un argomento. Se desideri più ascoltatori, finirai con più contenitori.

4

Se si ha familiarità con gli EJB basati sui messaggi, un MessageListenerContainer di Spring si sostituisce effettivamente a un MDB. Ottiene il suo nome perché è cablato con l'argomento/coda JMS, così come un singolo JMS MessageListener, e estrae i messaggi da quell'argomento/coda e li invia al MessageListener.

Hai perfettamente ragione che un solo MessageListener può essere registrato con ogni contenitore alla volta, ma considera che mentre il codice MessageListenerContainer può essere piuttosto complesso, in realtà è un componente runtime molto leggero. Non aver paura di crearne diversi esempi.

Inoltre, assicurarsi di scegliere l'implementazione MessageListener appropriata per la propria situazione. L'implementazione di Simple e Default è davvero molto diversa, ma nessuno dei due è "migliore".

2

I ragazzi sono corretti che più contenitori ti aiuterebbero, ma sembra un approccio sbagliato. Dal momento che l'obiettivo di JMS è quello di integrare diverse applicazioni/servizi piuttosto che processi applicativi interni (diverse classi di cui parli). Suggerirei di inviare messaggi push a classi diverse dopo averli ricevuti tramite Message Listener. Altrimenti date un'occhiata a framework come Apache Camel o Spring Integration.