Voglio usare un QueueSender in un ambiente multi-thread.Il thread QueueSender di JMS è sicuro?
È sicuro il thread QueueSender.send()
?
Voglio usare un QueueSender in un ambiente multi-thread.Il thread QueueSender di JMS è sicuro?
È sicuro il thread QueueSender.send()
?
No, a MessageProducer
/QueueSender
non è sicuro.
O più precisamente: Session
non è thread-safe. JavaDoc per Session
lo menziona esplicitamente nella prima frase:
Un oggetto Session è un contesto a thread singolo per la produzione e il consumo di messaggi.
E poiché un MessageProducer
/QueueSender
è legato ad una Session
non si deve utilizzare da più di un thread allo stesso tempo. In effetti, non devi usarlo da due thread diversi in momenti diversi!
seguito screenshot è da JMS2 specifiche
Come si può vedere oggetto di sessione non supporta l'utilizzo da parte thread concorrenti. La sessione non è un oggetto thread-safe. Lo stesso gos per tutti gli oggetti creati da quell'istanza Session come Messages,Producers,Consumers
. Quindi questi oggetti non devono essere condivisi da due thread e questo è qualcosa di cui il client dovrebbe prendersi cura al posto dei provider JMS.
Mille grazie per la risposta veloce – mebada