Le thread JMS QueueSender est-il sécurisé?

Je veux utiliser un QueueSender dans un environnement multi-thread.

Le fil QueueSender.send() sécurisé?

Non, un MessageProducer / QueueSender n’est pas thread-safe.

Ou plus précisément: la Session n’est pas thread-safe. JavaDoc for Session mentionne explicitement cela dans sa première phrase:

Un object de session est un contexte mono-threadé pour la production et la consommation de messages.

Et puisqu’un MessageProducer / QueueSender est lié à une Session vous ne devez pas l’utiliser à partir de plusieurs threads en même temps. En fait, vous ne devez pas non plus l’utiliser à partir de deux threads différents à des moments différents!

La capture d’écran suivante est issue des spécifications JMS2

entrez la description de l'image ici

Comme vous pouvez le constater, l’object Session ne prend pas en charge les threads simultanés. La session n’est pas un object thread-safe. Les mêmes conditions pour tous les objects créés à partir de cette instance de session, tels que Messages,Producers,Consumers . Donc, ces objects ne doivent pas être partagés par deux threads et c’est quelque chose que le client devrait prendre en charge à la place des fournisseurs JMS.