Spring集成JMS DSL

问题描述:

我们在XML中具有下面的工作配置,并正试图转换为DSL。不确定它们是否相同,也尝试使用inboundAdapter。但是,我无法弄清楚如何在那里设置并发相关值。有人可以建议他们是否在DSL中使用了这些参数中的messageDrivenChannelAdapter或inboundAdapter?Spring集成JMS DSL

<jms:message-driven-channel-adapter 
id="inputChannelAdapter" 
channel="inputChannel" 
destination-name="inboundQueueName" 
connection-factory="cachingConnectionFactory" 
acknowledge="transacted" 
header-mapper="defaultJmsHeaderMapper" 
error-channel="errorChannel" 
concurrent-consumers="10" 
max-concurrent-consumers="20"/> 



@Bean 
public IntegrationFlow jmsInboundFlow() { 
    return IntegrationFlows 
      .from(Jms.messageDrivenChannelAdapter(cachingConnectionFactory) 
        .configureListenerContainer(c -> { 
         DefaultMessageListenerContainer container = c.get(); 
         container.setSessionTransacted(true); 
         container.setSessionAcknowledgeModeName(""); 
         container.setMaxConcurrentConsumers(30); 
         container.setConcurrentConsumers(20); 
        }) 
        .destination(inboundQueueName).headerMapper(defaultJmsHeaderMapper) 
        .errorChannel("errorChannel")) 
      .channel(MessageChannels.queue("inputChannel")) 
      .get(); 
} 


@Bean 
public IntegrationFlow jmsInboundFlow1() { 
    return IntegrationFlows 
      .from(Jms.inboundAdapter(cachingConnectionFactory) 
        .configureJmsTemplate(t -> 
          t.deliveryPersistent(true).sessionTransacted(true).sessionAcknowledgeModeName("")) 
        .destination(inboundQueueName).headerMapper(defaultJmsHeaderMapper)) 
        .channel(MessageChannels.queue("inputChannel")) 
      .get(); 
} 

你对DefaultMessageListenerContainer container = c.get();做了什么是正确的方式来提供这些选项。

还有像使用Jms.container()厂变体:

Jms.messageDrivenChannelAdapter(
       Jms.container(this.jmsConnectionFactory, "containerSpecDestination") 
         .concurrentConsumers(20) 
         .maxConcurrentConsumers(30) 
         .get()) 

我们将在Spring集成5.0看看我们如何能够提高configureListenerContainer()推断泛型类型的目标容器类,让流畅的API来处理直接使用JmsDefaultListenerContainerSpec

关于此事请参阅JIRA ticket