是否可以在 Spring 批次中使用多个阅读器?

Is it possible to use multiple Readers in Spring Batch?

我们有一种情况,我们正在从 JMS 读取(将来可能会使用 RabbitMQ)并处理以获取数据。然后我们使用该数据来调用网络服务(另一篇读物)。最后,我们从 Web 服务中获取数据并将其写入另一个 JMS。所以在这个场景中有 2 个读数。

我们已经完成了初读和处理部分。我还看到有一些方法可以使用 MultipleWriters。但是,我们如何使用多个阅读器呢?我们是否必须在流程中包括最后的阅读部分?

如果我们使用了错误的方法,请纠正我们。这是我们第一次实施 Spring Batch。如果您能包含一个示例场景,我将不胜感激。

我认为您可能在谈论拥有多个 Step

例如,您已经在 step1 中完成了您所做的事情,那么您可以在 step2 中做其他事情(例如另一组 "actions")。请注意,“作业”将封装您的整个批处理过程。

对于同一个 "job",你绝对可以有多个 "steps"。

Spring Batch 中没有内置多个阅读器的概念。

我认为您最好的选择是将 Web 服务调用作为批处理阶段的一部分包含在内。尽量不要将其视为 "read",而更像是 "transformation"。由于您已经编写了一个处理器,我建议您考虑保留 Web 服务调用,因为它是 processor chain.

中自己的独立处理器

附带说明一下,通常当我想到有两个不同的读者时,这可能是一个标志,可以考虑完全考虑两个单独的批处理作业,如果它们在处理或编写方面相似,则可以重用某些组件。为您的项目拆分为两个作业似乎有些矫枉过正,但在您想要执行某些操作(例如聚合在某种数据结构中接收到的 JMS 消息,并改为对消息组进行单个 Web 服务调用)时可能很有用每条消息的 Web 服务调用。

另一方面,如果您不打算单独使用 Spring 批处理解决方案,则可能需要调查 Spring Integration。 Spring 集成可能更适合您的需求,因为它是围绕消息传递构建的,并且您正在向 JMS 管道写入数据或从中写入数据。如果您愿意,实际上可以结合使用批处理和集成。