首页 > 解决方案 > Spring Retry vs Hystrix

问题描述

@CircuitBreakerfromspring-retry@HystrixCommandfrom和有什么不一样spring-cloud-starter-netflix-hystrix

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

官方 Spring 指南正在使用@HystrixCommandhttps ://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)";
}

标签: springspring-boothystrixspring-retry

解决方案


  1. @CircuitBreaker- 不确定它是否是实际的注释。AFAIK,它不是。
  2. spring-retry-@Retryable是用于实现此目的的注释。这基本上所做的是根据某些标准重试当前正在执行的方法指定次数。
  3. @HystrixCommand- 当一个方法被执行时,这个注解实际上触发了断路器功能。

有效差异——

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

推荐阅读