Как обрабатывается сеанс jms в потоке, содержащем входящий адаптер, исходящий адаптер, канал ошибки и настроенном с одной и той же CachingConnectionfactory

У меня есть следующий поток:

   1) message-driven-channel-adapter -> 
             1.1) output-channel connected to -> service-activator -> outbound-channel-adapter (for sending response)
             1.2) error-channel connected to -> exception-type-router 
                        1.2.1) message is sent to different queues depending on the exception type using outbound-channel-adapter

         MessageDrivenChannelAdapter uses DefaultMessageListenrContainer and OutboundAdapter uses JMSTemplate
         Have used same cachingconnectionfactory for inbound and outbound adapters, 
         set acknowledge="transacted" in messageDrivenChannelAdapter
         set cacheLevel as CACHE_CONSUMER in DefaultMessageListenerContainer
         set cacheProducers=true and cacheConsumers=false in CachingConnectionFactory

Я так смущен тем, как jms session/producer/consumer создается и обрабатывается в этом потоке.

1) создаются ли потребители и производители, используемые входящим адаптером, исходящими адаптерами (используемыми для ответа и очередей ошибок) из одного и того же сеанса, т.е. создаются ли производители и потребители, используемые в потоке, из одного и того же сеанса?

2) И просто хотел подтвердить, есть ли какие-либо недостатки / проблемы в использовании cachingconnectionfactory даже после установки 1) cacheConsmers на false на заводе и 2) уровня кеша на CACHE_CONSUMER в DefaultMessageListenerContainer. Потому что читать форумы, в которых говорится, что cachingconnectionfactory не следует использовать, сбивает с толку.

3) Кроме того, есть сомнения относительно потока выполнения: в потоке, когда завершится выполнение метода активатора службы? Будет ли он завершен только после того, как сообщение будет отправлено в очередь вывода?

пожалуйста, порекомендуйте


person Vidya_85    schedule 31.10.2014    source источник


Ответы (1)


  1. Можно использовать фабрику соединений кэширования с контейнером прослушивателя, если вы не используете переменный параллелизм или отключили кеширование потребителей в фабрике.
  2. В вашем сценарии вам следует использовать фабрику соединений с кэшированием, потому что вы действительно хотите, чтобы производители кэшировались из соображений производительности.

Когда контейнер acknowledgemode является transacted, сеанс контейнера привязан к потоку и будет использоваться любым вышестоящим JmsTemplate, настроенным на использование той же фабрики соединений, до тех пор, пока не будет асинхронной передачи обслуживания (QueueChannel или ExecutorChannel); значение по умолчанию DirectChannel запускает нисходящие конечные точки в потоке контейнера.

Метод активатора службы вызывается (и «завершается») перед отправкой сообщения исходящему адаптеру.

person Gary Russell    schedule 31.10.2014
comment
Гари, спасибо за подробное объяснение. - person Vidya_85; 05.11.2014