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