Hystrix容错处理的使用(springcloud)
在微服务中,一旦有一个服务器出错,对于整个业务来说带来的灾害是不可估计的,因此,我们需要有一定的容错处理,在出错时降低对业务的影响因此Hystrix就应运而生它是通过超时处理和断路器模式进行容错处理,断路器模式类似于我们正常使用的电流断路器,这里就不多说了,直接说下此机制是怎么使用的吧。本例子代码(没有说明暂时未上传):添加依赖<dependency><gr...
在微服务中,一旦有一个服务器出错,对于整个业务来说带来的灾害是不可估计的,因此,我们需要有一定的容错处理,在出错时降低对业务的影响
因此Hystrix就应运而生
它是通过超时处理和断路器模式进行容错处理,断路器模式类似于我们正常使用的电流断路器,这里就不多说了,直接说下此机制是怎么使用的吧。
本例子代码:
Eureka:https://github.com/lihang212010/demo-cloud-Eureka/tree/master/demo-cloud-Eureka
微服务:https://github.com/lihang212010/demo-cloud-user
Hystrix https://github.com/lihang212010/Hystrix
添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
它的使用方法是
**@HystrixCommand(fallbackMethod = “××××”)"
××××可以是方法(正常使用)
也可以是接口类(Feign使用)
这是我控制器的使用,在方法中加上Throwable throwable参数可以看出容错原因
@RestController
public class MoviesController {
private static final Logger LOGGER=LoggerFactory.getLogger(MoviesController.class);
@Autowired
private RestTemplate restTemplate;
@HystrixCommand(fallbackMethod = "findByIDFallback") //使用Hystrix注解
@RequestMapping("/user/{id}")
public Users findById(@PathVariable Long id) {
return this.restTemplate.getForObject("http://demo-cloud-user/"+id, Users.class);
}
public Users findByIDFallback(Long id,Throwable throwable) { //注解对应的方法
LOGGER.error("进入回退方法的异常为:"+throwable);
Users users=new Users();
users.setName("出错时用户");
return users;
}
}
然后在运行类中需要加@EnableHystrix 注解
Users是一个数据POJO
我们首先开启我们Eureka
接着是2个微服务
最后开启我们的Hystrix(我数据库并无数据)
然后关掉两个微服务
再次访问
并没有报错而是回到了我们设置的出错时的数据。
而如果不设置Hystrix时我们程序会报404错误。
Feign的容错处理因为是接口的原因需要继承
我单独放一博客上吧,不然一堆图片看着烦人
博客地址(没有说明我没写好)
更多推荐
所有评论(0)