如何在包含入站适配器,出站适配器,错误通道的流中处理jms会话,并使用相同的CachingConnectionfactory进行配置

时间:2014-10-31 09:30:09

标签: spring-integration spring-jms

我有以下流程:

   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时是否存在任何缺点/问题,即使在工厂中将cacheConsmers设置为false并且2)在DefaultMessageListenerContainer中将缓存级别设置为CACHE_CONSUMER之后也是如此。因为,阅读论坛说不应该使用cachingconnectionfactory是很困惑的。

3)另外,对执行流程有疑问:在流程中,服务激活器方法执行何时完成?只有在将消息发送到输出队列后它才会完成吗?

请告知

1 个答案:

答案 0 :(得分:1)

  1. 只要您不使用变量并发,或者在工厂中禁用缓存消费者,就可以将缓存连接工厂与侦听器容器一起使用。
  2. 在您的方案中,您应该使用缓存连接工厂,因为您确实希望缓存生产者出于性能原因。
  3. 当容器acknowledgemodetransacted时,容器会话绑定到该线程,并且将被配置为使用相同连接工厂的任何上游JmsTemplate使用,因为没有异步切换(QueueChannelExecutorChannel);默认DirectChannel运行容器线程上的下游端点。

    在将消息发送到出站适配器之前,调用服务激活器方法(和#34;完成")。