第一步:导入依赖
<!--Hystrix依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
第二步:开启Hystrix,修改启动类
@EnableCircuitBreaker:表示此服务开启Hystrix功能
在你需要的熔断的子模块的启动类上加上注解
// 开启熔断功能
@EnableCircuitBreaker
public class OrderApplication {}
第三步:给服务接口开启熔断功能,并指定服务降级方法
-
@HystrixCommand:开启熔断功能,并指定服务降级方法
-
降级方法:参数和返回值必须和被熔断的方法一致 ,方法名要和fallbackMethod的值一致
-
@RestController @RequestMapping("order") public class OrderController { @GetMapping("{orderId}") // 标记方法熔断,fallbackMethod指定的是托底方法名称,当远程服务调用出现异常,或是方法本身出现异常,会触发托底方法 @HystrixCommand(fallbackMethod = "fallbackMethod") public Order queryOrderByUserId(@PathVariable("orderId") Long orderId) { // 根据id查询订单并返回 Order order = orderService.queryOrderById(orderId); // 调用用户服务接口传递userId User user = restTemplate.getForObject("http://user-server/user/" + order.getUserId(), User.class); // User user = client.queryById(order.getUserId()); order.setUser(user); return order; } /** * 降级方法,参数和返回值必须和被熔断的方法一致 ,方法名要和fallbackMethod的值一致 * @param orderId * @return */ public Order fallbackMethod(@PathVariable("orderId") Long orderId) { return new Order(-1L,"服务熔断触发,用户服务不可用"); } }