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

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

【问题讨论】:

    标签: java spring spring-boot spring-integration spring-batch


    【解决方案1】:

    你可以做到的:

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

    希望这会有所帮助。

    【讨论】:

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

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

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

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

    希望对你有帮助...

    【讨论】:

    • 我的困境是块可能不会限制获取率。即使我将块设置为 10,spring batch 也会在一秒钟内获取这么多的记录。
    猜你喜欢
    • 1970-01-01
    • 2018-02-08
    • 2020-03-31
    • 2014-12-15
    • 2018-05-27
    • 2015-05-13
    • 2017-06-25
    • 1970-01-01
    • 2017-10-06
    相关资源
    最近更新 更多