Добрый день,
Ваше понимание в значительной степени верно. Обратите внимание, что когда вы применяете CACHE_CONSUMER
к прослушивающему компоненту, это означает, что прослушиватель сообщений Spring JMS должен кэшировать получателя сообщений (что очевидно). Кэширование потребителя требует, чтобы прослушиватель сообщений Spring JMS также кэшировал сеанс и соединение JMS.
Если вы хотите использовать транзакционную конечную точку, ответственность за это кэширование должна быть снята с прослушивателя сообщений Spring JMS. В случае транзакции вы извлекаете фабрику соединений с кэшированием Вот почему уровень по умолчанию равен CACHE_NONE
, если transacted
равен true
.
Когда вы устанавливаете transacted
на true
и предоставляете фабрику соединений, создается диспетчер транзакций JMS, который работает с фабрика соединений для управления транзакциями. Вот почему прослушиватель сообщений Spring JMS не может управлять потребителем / сеансом / соединением.
Первый ответ правильный, использование CachingConnectionFactory
позволит вам получить желаемое кэширование, а также вывести его из-под контроля. контейнер прослушивателя сообщений Spring. Что позволяет менеджеру транзакций иметь доступ к сеансу JMS.