spring-integration - Spring Integration JMS DSL

标签 spring-integration 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()工厂:

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/

相关文章:

java - Spring Cloud Stream Kafka 记录太大

android - Gradle:找不到 DSL 方法:minSdkVersion/targetSdkVersion/compileSdkVersion/buildToolsVersion

linq - Groovy 1.8::LINQ 已应用

java - 使用 Spring Integration 创建自定义 header

spring-integration - 'UniqueExpiryCallback' 中只能注册一个 'MessageGroupStore' 实例

antlr - 使用 ANTLR4 设计灵活语言应用程序的一般策略

python - 领域特定语言,标准文件格式

inheritance - F# 和继承建模

java - 通过注解配置 Spring Integration Control Bus

java - Spring Integration,全局将无效消息转移到不同的目的地