Безопасен ли поток JMS QueueSender? - PullRequest
15 голосов
/ 15 февраля 2010

Я хочу использовать QueueSender в многопоточной среде.

QueueSender.send() безопасна ли нить?

Ответы [ 2 ]

13 голосов
/ 15 февраля 2010

Нет, MessageProducer / QueueSender не безопасен для потоков.

Или, более конкретно: Session не является поточно-ориентированным. JavaDoc для Session явно упоминает об этом в своем первом предложении:

Объект Session - это однопоточный контекст для создания и потребления сообщений.

И поскольку MessageProducer / QueueSender связан с Session, вы не должны использовать его из более чем одного потока одновременно. На самом деле вы не должны использовать его из двух разных потоков в разное время!

11 голосов
/ 13 декабря 2013

Следующий скриншот взят из спецификации JMS2

enter image description here

Как видите, объект сеанса не поддерживает использование параллельными потоками. Сессия не является потокобезопасным объектом. То же самое для всех объектов, созданных из этого экземпляра сеанса, например Messages,Producers,Consumers. Таким образом, эти объекты не должны совместно использоваться двумя потоками, и об этом должен заботиться клиент, а не провайдеры JMS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...