Attualmente sto aggiungendo il supporto JMS a un framework simile a un'applicazione-server. Il JMS sarà implementato da HornetQ (broker stand-alone, jar hornetq sul classpath dei server) ma non c'è né JBoss né spring né qualsiasi altra cosa che possa fornire MDB.Procedura consigliata per l'elaborazione di messaggi multi-threading sulle code JMS
Il passaggio successivo consiste nell'aggiungere un listener di messaggi a una coda xa che consenta l'elaborazione parallela dei messaggi in arrivo. Alcuni messaggi potrebbero avviare attività a esecuzione prolungata, quindi l'idea di base è generare i thread di lavoro dal metodo onMessage
.
Nel mio lungo viaggio attraverso Internet mi sono imbattuto in this discussion, dove uno dei partecipanti ha menzionato, che non lo farebbe ma userebbe una coda interna extra per l'attività: il listener di messaggi (a thread singolo) quindi semplicemente afferrerebbe il messaggi dalla coda in entrata e creare nuovi messaggi per una coda interna, dove all'altra estremità di quella coda interna alcuni thread di lavoro combattono per i messaggi in arrivo. I messaggi in entrata quindi verrebbero riconosciuti una volta che sono stati "copiati" nella coda interna (che per me è ok).
Purtroppo non dicono perché sarebbe meglio di non deporre le uova thread di lavoro dal metodo onMessage
- forse, perché l'ascoltatore sarebbe bloccare se tutte le discussioni dalla piscina sono occupati. Così sto cercando pro ei contro per le decisioni disegni:
- Avvio thread di lavoro dal metodo onMessage del messaggio ascoltatore
- Usa una coda interna a "inviare messaggi al thread di lavoro"