Spring Retry vs Hystrix

Posted

技术标签:

【中文标题】Spring Retry vs Hystrix【英文标题】: 【发布时间】:2021-01-12 00:03:10 【问题描述】:

spring-retry 中的@CircuitBreakerspring-cloud-starter-netflix-hystrix 中的@HystrixCommand 有什么区别?

他们似乎都实现了断路器模式。

官方 Spring 指南使用 @HystrixCommand: https://spring.io/guides/gs/circuit-breaker/

在他们的例子中:

@HystrixCommand(fallbackMethod = "reliable")
public String readingList() 
URI uri = URI.create("http://localhost:8090/recommended");

  return this.restTemplate.getForObject(uri, String.class);


public String reliable() 
  return "Cloud Native Java (O'Reilly)";

相当于(据我所知):

@CircuitBreaker
public String readingList() 
URI uri = URI.create("http://localhost:8090/recommended");

  return this.restTemplate.getForObject(uri, String.class);


@Recover
public String reliable() 
  return "Cloud Native Java (O'Reilly)";

【问题讨论】:

【参考方案1】:
    @CircuitBreaker- 不确定它是否是实际的注释。 AFAIK,事实并非如此。 spring-retry- @Retryable 是用于实现此目的的注解。这基本上是根据特定标准重试当前正在执行的方法指定次数。 @HystrixCommand- 这个注解实际上会在方法执行时触发断路器功能。

有效差异-

    @Retryable 与断路器无关。即使结果每次都失败,它也会盲目地重试操作。它在当前请求的本地上下文中运行。这意味着它不知道系统上重试的全局状态。它只关心每个请求都必须重试多次。 @HystrixCommand 是一个智能注解。它知道系统的全局状态,如果失败次数超过指定的断路器阈值,则实际上停止执行该方法。

【讨论】:

以上是关于Spring Retry vs Hystrix的主要内容,如果未能解决你的问题,请参考以下文章

spring-retry实现方法请求重试

java retry(重试) spring retry, guava retrying 详解

SpringBoot 消息重试框架 spring-retry 和 guava-retry 详解

spring-retry失败重试

spring-retry失败重试

Spring Boot 2.x 实践记:Retry(annotion)