java - 从现有 channel 创建新的消息链

标签 java spring-integration

我希望在现有 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 .

  1. channel管道和过滤器的核心,因为它是一个管道,因此无论您是否使用链,您仍然使用 channel 。链允许您做的是通过让您定义 filter 元素的 list 来简化流的定义。这些元素仍然与匿名 channel 相关联。

  2. 显式 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/

相关文章:

java - 如何使用 Spring Integration 访问邮箱文件夹

Java:找到没有任何数字和至少一个大写字符的最长子串

java - 为什么我不能从数组创建单链表?

java - 在 vaadin 中强制用户注销。如何显示消息以强制注销用户

error-handling - Spring集成errorChannel在JUnit中没有消息

java - Spring 集成是否为其组件提供任何监控/时间性能实用程序?

java - java中两个表达式的区别

java - 我可以在同一应用程序上下文中同时使用动态代理和 CGLib 代理吗?

java - Spring集成websocket抛出 "' outputChannel'或需要 'outputChannelName'“异常

spring - 使用 Spring Integration Mail 连接到 Microsoft Exchange Server