Spring 集成窃听器
Spring Integration Wire Tap
在 Java DSL 中绑定两个 IntegrationFlow 的最佳方法是什么:
- .wireTap(someFlow());
- .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
在 Java DSL 中绑定两个 IntegrationFlow 的最佳方法是什么:
- .wireTap(someFlow());
- .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