我们在 XML 中有以下工作配置,并正在尝试转换为 DSL。不确定它们是否等效,也尝试使用 inboundAdapter。但是,我无法弄清楚如何在那里设置与并发相关的值。有人可以建议他们是否在 DSL 中使用了带有这些参数的 messageDrivenChannelAdapter 或 inboundAdapter 吗?
<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();
做什么是提供这些选项的正确方法。
还有一个变体,比如use Jms.container()
工厂:
Jms.messageDrivenChannelAdapter(
Jms.container(this.jmsConnectionFactory, "containerSpecDestination")
.concurrentConsumers(20)
.maxConcurrentConsumers(30)
.get())
我们将在 Spring Integration 中看到 5.0
我们如何改进 configureListenerContainer()
为目标容器类推断通用类型,让流畅的 API 处理 JmsDefaultListenerContainerSpec
直接。
参见 JIRA ticket关于这件事。
关于spring-integration - Spring Integration JMS DSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43158958/