如何定制弹簧集成流程



我有一个要求,比如

  1. 文件来自 FTP
  2. 文件复制到本地目录
  3. 文件被拾取
  4. 服务器 1 解析和读取
  5. 服务 2 丰富 XYZ
  6. 服务3丰富CDY
  7. 服务 4 将数据持久保存在数据库中并获取生成的 ID 集(稍后需要(
  8. 服务
  9. 5,在服务4的基础上丰富另一条信息
  10. 服务 6 将向另一个系统发送消息
  11. 服务 7 将再次更新数据
  12. 然后服务 8 将执行某些操作等
  13. 将文件移回完成目录

在这一点上,我正在考虑有一个流程来处理FTP端并获取文件并下载它。

流程 # 02将选取文件并如上所述

进行处理我的问题是我是否应该使用变压器来完成上述所有这些步骤。如果我有一个带有所有变压器的流,也可以吗,或者我应该将其分解为子流吗?

如果任何变压器抛出异常,它会忽略其余的变压器并转到错误通道吗?

另外,如果我放置一个异常处理通道,我实际上会知道异常是在哪一步抛出的吗?

如果您不熟悉许多其他 Spring 集成组件,例如Enricher: https://docs.spring.io/spring-integration/reference/html/message-transformation.html#content-enricher 和 JPA 通道适配器:https://docs.spring.io/spring-integration/reference/html/jpa.html#jpa

您实际上可以在单个流中执行所有操作,即使您将拥有应用程序的多个实例。可以配置流,使每个步骤都可以分发到整个集群以进行均匀计算。另一方面,我确实将我的流拆分为其中的几个逻辑单元。

如果一个步骤引发异常,您确实不会再带着该消息向下游移动。这与常规Java程序的工作方式完全相同。

是的,从某个版本开始,我们将整个组件添加到异常消息中:

throw IntegrationUtils.wrapInHandlingExceptionIfNecessary(messageToUse,
() -> "error occurred in message handler [" + this + "]", e);

注意this。它将使用 Bean 名称和配置源调用toString(),以确定流中发生错误的异常位置。

最新更新