Spring Integration Java DSL - IntegrationFlow多个订阅者

时间:2016-11-08 17:57:37

标签: java spring spring-integration

我使用Spring Integration DSL的速度越来越快。我正在玩下面的例子。

 @Bean
    public IntegrationFlow flow() {
        return IntegrationFlows.from(INBOX)
                .transform(p -> "world")
                .get();
    }

我正在寻找从这一个流程订阅多个渠道的能力。我找不到任何关于此事的内容。

例如下面的内容,此流程订阅了不同的频道。

 @Bean
        public IntegrationFlow flow() {
            return IntegrationFlows.from(INBOX).flow(INBOX2)
                    .transform(p -> "world")
                    .get();
        }

2 个答案:

答案 0 :(得分:3)

这是不可能的。没有任何Endpoint包含多个inputChannel s。

另一方面,我们不需要这么复杂,因为我们始终可以bridge从一个频道到另一个频道:

@Bean
@BridgeTo(INBOX)
public MessageChannel INBOX2() {
    return new DirectChannel();
}

此外,您可以考虑使用某些router来评估所需的输出频道。

MessageChannel本身在Spring Integration设计中很复杂,弄乱端点逻辑听起来不太好。

答案 1 :(得分:1)

在本教程[Receive and send multiple JMS messages in one transaction with Spring Integration Java DSL]中,他们已经描述了

  

然而,Java DSL尚未提供此属性。另一个   解决这个问题的方法就是替换消息驱动   具有事务轮询器的通道适配器,但这也不是   可能在当前的Java DSL中。为解决这个问题,我们更换了   带有会话的jmsTemplate的出站适配器中的jmsFactory   交易设置为true。导致:

IntegrationFlows
  .from(subscribableChannel())
  .handle(Jms.outboundAdapter(jmsTemplate).destination(QUEUE2))
.get();