Spring Retry vs Hystrix
Posted
技术标签:
【中文标题】Spring Retry vs Hystrix【英文标题】: 【发布时间】:2021-01-12 00:03:10 【问题描述】:spring-retry
中的@CircuitBreaker
和spring-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的主要内容,如果未能解决你的问题,请参考以下文章
java retry(重试) spring retry, guava retrying 详解