春季批处理写入器限制

Posted

技术标签:

【中文标题】春季批处理写入器限制【英文标题】:Spring batch writer throttling 【发布时间】:2019-03-26 03:48:51 【问题描述】:

我在做spring批处理项目,从数据库中读取记录,然后写入rabbitmq,然后发送到HTTP消息网关。网关有 150TPS,我需要将我的应用程序限制为 150TPS。有没有办法用 spring batch 节流或任何其他更好的方法?

【问题讨论】:

【参考方案1】:

你可以做到的:

在 Spring Batch 方面:使用 ItemWriteListener#beforeWrite,使用 Thread.sleep 或使用速率限制库(如 Guava 或 Resilience4j)延迟项目的写入 在 RabbitMQ 端:使用delayed-message-plugin 以所需的速率延迟消息的传递。

希望这会有所帮助。

【讨论】:

我使用了 Guava RateLimiter 并且工作正常,即使它有关于其稳定性的警告【参考方案2】:

您可以通过将最大块大小定义为您的 TPS 或小于该值来尝试面向块的处理。

您可以参考以下文档通过面向块的处理实现 Spring 批处理:

https://docs.spring.io/spring-batch/trunk/reference/html/configureStep.html

希望对你有帮助...

【讨论】:

我的困境是块可能不会限制获取率。即使我将块设置为 10,spring batch 也会在一秒钟内获取这么多的记录。

以上是关于春季批处理写入器限制的主要内容,如果未能解决你的问题,请参考以下文章

春季批处理中每个作业的不同Jobrepository数据源?

春季批处理不处理所有记录

在阅读器中为 Spring 批处理作业实现 Keyset 分页

在春季批处理部署程序分区处理程序中定期获取正在运行的工作节点的状态

在春季批处理(spring-boot-1.5.2.RELEASE)中使用多个数据源在启动时引发异常

IndexOutOfBoundsException 春季批处理和春季启动