Является ли поток JMS QueueSender безопасным?

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

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

Ответы

Ответ 1

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

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

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

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

Ответ 2

Следующий снимок экрана из спецификации JMS2

enter image description here

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