【问题标题】:Throttle calls to ItemProcessor in Spring batch在 Spring 批处理中限制对 ItemProcessor 的调用
【发布时间】:2016-10-15 06:17:51
【问题描述】:

我创建了 spring 批处理,它在使用 ItemWriter 写入数据库之前从平面文件中读取并使用 ItemProcessor 处理数据,一切正常。

现在的问题我需要控制调用“Process”方法处理数据的次数,我的itemprocessor调用了一些详细的API,API需要一些时间来响应(不是确定超时),因此,我不应该用新消息使 API 过载。我需要控制对 API 的调用,例如 y 秒内调用 X 次 如果达到,我需要等待 Z 秒 em> 在恢复活动之前。

我不确定如何在 Spring Batch 中实现这一点,我正在考虑在处理器中实现 chunklistener 以跟踪调用。但是,我正在寻找更好的方法。

【问题讨论】:

    标签: spring spring-batch


    【解决方案1】:

    您不需要监听器来执行此操作。

    如果你没有在你的stop中定义一个异步taskexecutor,那么整个处理是完全顺序的。

    它将读取一个项目,处理一个项目,读取下一个项目,处理它直到它被读取并处理与您在提交大小(-> 块的大小)中定义的一样多的项目。之后,它将这些项目放入一个列表中,并将该列表转发给作者。这个过程将一直执行,直到所有元素都被读取、处理并最终写入。

    如果你想并行处理你的块,那么你可以定义一个异步任务执行器。

    如果您在步骤中定义了 AsyncTaskExeutor,则可以配置此 TaskExecutor 管理/创建的线程数。此外,您还可以定义您的步骤的节流限制,它定义了可以并行处理的块数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-28
      • 1970-01-01
      • 2020-12-29
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      • 2017-12-11
      相关资源
      最近更新 更多