我使用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();
}
答案 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();