Spring 集成 JMS DSL
Spring Integration JMS DSL
我们在 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()
factory:
Jms.messageDrivenChannelAdapter(
Jms.container(this.jmsConnectionFactory, "containerSpecDestination")
.concurrentConsumers(20)
.maxConcurrentConsumers(30)
.get())
我们将在 Spring 集成 5.0
中看到我们如何改进 configureListenerContainer()
以推断目标容器的通用类型 class 让流畅 API直接处理JmsDefaultListenerContainerSpec
。
关于此事请参阅 JIRA ticket。
我们在 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()
factory:
Jms.messageDrivenChannelAdapter(
Jms.container(this.jmsConnectionFactory, "containerSpecDestination")
.concurrentConsumers(20)
.maxConcurrentConsumers(30)
.get())
我们将在 Spring 集成 5.0
中看到我们如何改进 configureListenerContainer()
以推断目标容器的通用类型 class 让流畅 API直接处理JmsDefaultListenerContainerSpec
。
关于此事请参阅 JIRA ticket。