在spring cloud中,使用hystrix首先要添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
在spring boot的启动类上添加@EnableCircuitBreaker注解
@SpringBootApplication
@EnableEurekaClient
@EnableCircuitBreaker
public class ConsumerMovieRibbonApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerMovieRibbonApplication.class, args);
}
}
在Controller类的映射方法上添加 @HystrixCommand注解,并指定fallback方法
@RestController
public class MovieController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/movie/{id}")
@HystrixCommand(fallbackMethod = "findByIdFallback")
public User findById(@PathVariable Long id) {
return this.restTemplate.getForObject("http://microservice-provider-user/simple/" + id, User.class);
}
public User findByIdFallback(Long id) {
User user = new User();
user.setId(0L);
return user;
}
}
当调用findById方法出现失败(抛出异常、超时、线程拒绝、短路)时,就会执行fallbackMethod 参数指定的findByIdFallback方法。
findByIdFallback方法的参数、返回值要与原findById方法的参数、返回值保持一致。