【问题标题】:Is it possible to use multiple Readers in Spring Batch?是否可以在 Spring Batch 中使用多个阅读器?
【发布时间】:2015-05-31 04:52:47
【问题描述】:
我们有一种情况,我们正在从 JMS 中读取数据(将来可能会使用 RabbitMQ)并进行处理以获取数据。然后我们使用该数据调用 Web 服务(另一种解读)。最后,我们从 Web 服务中获取数据并将其写入另一个 JMS。所以在这种情况下有 2 个读数。
我们已经完成了第一次阅读和处理部分。我还看到有一些方法可以使用MultipleWriters。但是,我们如何使用多个阅读器?我们是否必须在此过程中包括最后阅读部分?
如果我们使用了错误的方法,请纠正我们。这是我们第一次实现 Spring Batch。如果您能提供一个示例场景,我将不胜感激。
【问题讨论】:
标签:
jms
rabbitmq
message-queue
spring-batch
【解决方案1】:
我认为您可能在谈论拥有多个Step。
例如,您已经完成了在step1 中所做的事情,那么您可以在step2 中执行其他操作(例如另一组“操作”)。请注意,“作业”将封装您的整个批处理过程。
同一个“工作”绝对可以有多个“步骤”。
【解决方案2】:
Spring Batch 中没有内置的 Multiple Readers 概念。
我认为您最好的选择是将 Web 服务调用作为批处理阶段的一部分。尽量不要将其视为一种“阅读”,而更像是一种“转变”。由于您已经编写了一个处理器,我建议您考虑将 Web 服务调用作为它自己的独立处理器保留在 processor chain 中。
附带说明一下,通常当我想到有两个不同的阅读器时,这可能表明要考虑两个单独的批处理作业,如果它们在处理或写入方面相似,它们可能会重用某些组件。将您的项目拆分为两个作业似乎有点过头了,但如果您想做一些事情,例如聚合以某种数据结构接收的 JMS 消息,并改为对消息组进行单个 Web 服务调用,这可能会很有用每条消息的网络服务调用次数。
另一方面,如果您不打算单独使用 Spring Batch 解决方案,您可能需要调查 Spring Integration。 Spring 集成可能更适合您的需求,因为它是围绕消息传递构建的,并且您正在与 JMS 管道进行写入。如果您愿意,实际上可以结合使用批处理和集成。