【问题标题】:Do I need hystrix dependency when I need @Retry and use spring initializr?当我需要 @Retry 并使用 spring initializr 时,我是否需要 hystrix 依赖?
【发布时间】:2020-05-21 20:12:06
【问题描述】:

我将在我的 Spring Boot MVC 应用程序中使用 @Retry,同时通过 @Version 使用乐观锁定将数据存储到 DB。

当发生 OptimisticLockException 异常时,我会重试多次。并在 100 次后跌倒(根据我的逻辑,这是检查是否发生错误的触发器)

那么它是上面描述的断路器模式吗?在 Spring initializr 中创建项目时,我应该使用 Hystrix 依赖吗?或者我可以在 gradle/maven 中添加 spring-retry 依赖项并使用 @Retry 吗? 我很困惑,请帮助

【问题讨论】:

    标签: spring spring-boot hystrix spring-retry spring-initializr


    【解决方案1】:

    当数据库调用失败时,您不需要 Hystrix 来重试数据库调用。您可以使用声明式重试(例如@Retryable 和其他注释)或来自spring-retryimperative API

    就依赖关系而言,是的 - 只需添加 spring-retry,如果使用声明式重试,则 AOP 类上还有一个额外的 runtime dependency

    (以上所有链接都指向同一个 GitHub Spring 项目)

    【讨论】:

    • 谢谢,能否请您解释一下为什么 Hystrix 是一个特例?
    • 我不认为 Hystrix 是一个特例。我向您指出 spring-retry 的一个原因是 Hystrix 在maintenance mode 中。我已经成功地使用 spring-retry 重试了对 MySQL 的 DB 调用,这些调用由于下一个键锁(MySQL“事物”)引起的死锁而失败。但是,如果您决定使用 Hystrix,您可能也会成功。只是指出一些事情 - @Retry 来自 Hystrix,@Retryable 来自 spring-retry。
    • 我想我有点走神了 - @Retry 来自resilience4j?
    • 我不知道在哪里@Retry我只是想明白,如果Hystrix像往常一样做@Retry为什么它在spring initializr中有特别提及?
    • 如果用例是重试由于乐观锁定检测到基础数据更改而失败的数据库更新,我会说它不是 @987654326 @。因此,只需在 gradle/maven 中添加 spring-retry 作为依赖项并使用 @Retryable
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    相关资源
    最近更新 更多