我有以下流程:
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)另外,对执行流程有疑问:在流程中,服务激活器方法执行何时完成?只有在将消息发送到输出队列后它才会完成吗?
请告知
答案 0 :(得分:1)
当容器acknowledgemode
为transacted
时,容器会话绑定到该线程,并且将被配置为使用相同连接工厂的任何上游JmsTemplate
使用,因为没有异步切换(QueueChannel
或ExecutorChannel
);默认DirectChannel
运行容器线程上的下游端点。
在将消息发送到出站适配器之前,调用服务激活器方法(和#34;完成")。