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。