我希望从现有渠道中创建一条消息链,而不必再次专门写所有元素。
目前,我有一些长链,它们与某些元素相互重叠。每次添加新元素时,都必须将其添加到多个链中。我希望创建一个通道链,可以将其称为序列。
为简化起见,目前我的applicationContext具有3个通道。频道1和频道2,以及频道3,由以下两个组成:
<int:chain input-channel="channel-1">
<int:service-activator ref="serviceA" method="doService" />
<int:service-activator ref="serviceB" method="doService" />
<int:service-activator ref="serviceC" method="doService" />
</int:chain>
<int:chain input-channel="channel-2">
<int:service-activator ref="serviceD" method="doService" />
<int:service-activator ref="serviceE" method="doService" />
<int:service-activator ref="serviceF" method="doService" />
</int:chain>
<int:chain input-channel="channel-3">
<int:service-activator ref="serviceA" method="doService" />
<int:service-activator ref="serviceB" method="doService" />
<int:service-activator ref="serviceC" method="doService" />
<int:service-activator ref="serviceD" method="doService" />
<int:service-activator ref="serviceE" method="doService" />
<int:service-activator ref="serviceF" method="doService" />
</int:chain>
我正在寻找一种简单的解决方案,它将使我能够做类似的事情
<int:chain input-channel="channel-3">
<??? channel-1 />
<??? channel-2 />
</int:chain>
有一些简单的方法可以做到吗?
答案 0 :(得分:2)
我认为您已经误解了chain
和channel
的概念。
channel
是管道过滤器的核心,因为它是 管道 ,因此天气是否使用链,还是仍然使用频道。链允许您执行的操作是通过定义 filter 元素的 list 来简化流程的定义。这些元素仍与匿名渠道相关。
明确引用了显式通道(例如<int:channel...>
),从而允许多个流通过向/从此类通道发送或接收消息来相互缠绕渠道。
因此,希望您能看到从渠道创建链既违反了 pipes-and-filters 架构,也违反了我们试图保持非常一致的框架设计。换句话说,我从您的帖子中看到的是,您有一些流程可能是生产者和/或消费者的其他流程(全部或部分),如果是情况下,只需使用显式渠道即可。
这是流程的简化版本:
<int:chain input-channel="channel-1" output-channel="channel-1out">
<int:service-activator ref="serviceA" method="doService" />
<int:service-activator ref="serviceB" method="doService" />
<int:service-activator ref="serviceC" method="doService" />
</int:chain>
<int:chain input-channel="channel-2">
<int:service-activator ref="serviceD" method="doService" />
<int:service-activator ref="serviceE" method="doService" />
<int:service-activator ref="serviceF" method="doService" />
</int:chain>
<int:bridge input-channel="channel-1out" output-channel="channel-2"