Spring 集成窃听器

Spring Integration Wire Tap

在 Java DSL 中绑定两个 IntegrationFlow 的最佳方法是什么:

  1. .wireTap(someFlow());
  2. .channel("someFlow.input");

一般来说,我有一个单向工作流 [flow1 -> someFlow -> someAnotherFlow] 等等;

你的问题不清楚,但感觉你想把一个流的结果发送到另一个流。本质上将它们连接到一个流。

channel() 是最好的方法。关键是 IntegrationFlow 只是一个逻辑容器,在运行时没有太多繁重的工作。我们需要注意的组件是端点和它们之间的通道。即使是单个 IntegrationFlow 在其 handle()transform()split() filter() 等之间也有通道。这些端点之间的连接在运行时很重要。由于每个端点都有其要激活的 inputChannel,这并不意味着该端点的声明位置和方式:您仍然可以从应用程序的任何位置向该通道发送消息。这是端点及其通道背后的一些逻辑。但我同意将业务逻辑视为一些单元工作的组合要容易得多,例如 IntegrationFlow。因此,要连接这些单元,您实际上只需要知道要将此工作单元的结果发送到的输入通道。

窃听在某些情况下也很有用,当您想在某个端点向其他端点发送相同的消息并继续此流程时。

所以,你的两个变体都是有效的,但如果它变成非线性流,它们可能会产生轻微的逻辑差异,反之亦然。

在有关流和窃听的文档中查看更多内容:

https://docs.spring.io/spring-integration/docs/current/reference/html/dsl.html#java-dsl

https://docs.spring.io/spring-integration/docs/current/reference/html/core.html#channel-wiretap