由于 Spring Integration 中的抽象是一等公民,因此始终假定集成流的组合。
流中任何终端节点的输入通道都可用于从任何其他终端节点发送消息,而不仅仅是从将此通道作为输出的终端节点发送消息。
此外,使用 contract、Content Enricher 组件、复合端点(如 ,以及现在的 bean)(例如 ),在较短的、可重用的部分之间分配业务逻辑非常简单。
最终组合所需的只是有关 a 的 发送 或 接收 的知识。MessageChannel
@MessagingGateway
<chain>
IntegrationFlow
IntegrationFlowAdapter
MessageChannel
从 version 开始,为了从最终用户中抽象出更多内容并隐藏实现细节,引入了 factory 方法,以允许从现有流的输出中启动电流:5.5.4
MessageChannel
IntegrationFlow
from(IntegrationFlow)
IntegrationFlow
@Bean
IntegrationFlow templateSourceFlow() {
return IntegrationFlow.fromSupplier(() -> "test data")
.channel("sourceChannel")
.get();
}
@Bean
IntegrationFlow compositionMainFlow(IntegrationFlow templateSourceFlow) {
return IntegrationFlow.from(templateSourceFlow)
.<String, String>transform(String::toUpperCase)
.channel(c -> c.queue("compositionMainFlowResult"))
.get();
}
另一方面,它添加了一个终端运算符,用于在一些其他流的输入通道处继续电流:IntegrationFlowDefinition
to(IntegrationFlow)
@Bean
IntegrationFlow mainFlow(IntegrationFlow otherFlow) {
return f -> f
.<String, String>transform(String::toUpperCase)
.to(otherFlow);
}
@Bean
IntegrationFlow otherFlow() {
return f -> f
.<String, String>transform(p -> p + " from other flow")
.channel(c -> c.queue("otherFlowResultChannel"));
}
流中间的组合可以通过现有的 EIP 方法轻松实现。
通过这种方式,我们可以从更简单、可重用的逻辑块组合流,从而构建任何复杂的流。
例如,你可以添加一个 bean 库作为依赖项,只需将它们的配置类导入到最终项目中并针对你的定义进行自动连接就足够了。gateway(IntegrationFlow)
IntegrationFlow
IntegrationFlow