我希望在现有 channel 之外创建一个消息链,而不是专门重新编写所有元素。
目前我有几个长链,它们与某些元素相互重叠。每次添加新元素时,我都必须将其添加到多个链中。我希望创建一个 channel 链,可以称为序列。
为简化起见,我的 applicationContext 目前有 3 个 channel 。 channel 1 和 channel 2,以及由两者组成的 channel 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>
是否有一些简单的方法可以做到这一点?
最佳答案
我认为您误解了 chain
的概念和 channel
.
channel
是管道和过滤器的核心,因为它是一个管道,因此无论您是否使用链,您仍然使用 channel 。链允许您做的是通过让您定义 filter 元素的 list 来简化流的定义。这些元素仍然与匿名 channel 相关联。显式 channel (例如
<int:channel...>
)专门供引用,允许多个流通过向此类 channel 发送消息或从此类 channel 接收消息来相互交织。
因此,希望您能看到从 channel 创建链在某种程度上违背了管道和过滤器架构以及我们试图保持非常一致的框架设计。换句话说,我从你的帖子中读到的是,你有一些流量可能是其他流量(全部或部分)的生产者和/或消费者,如果那是案例只是使用显式 channel 。
这是您流程的简化版本:
<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"
关于java - 从现有 channel 创建新的消息链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54004472/