010 Hystrix使用
一 .概述
在本次,我们会分成下面的两个部分记性Hystrix的介绍.
[1]Ribbon+RestTemplate的使用
[2]Feign的使用
二 .Ribbon的使用
[1]添加依赖包
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency>
[2]启动类改造
@EnableCircuitBreaker
添加上述的注解
[3]修改微服务的调用.
@HystrixCommand(fallbackMethod="queryUserHystrix") @GetMapping("user/{id}") public User queryUser(@PathVariable("id") int id) { return restTemplate.getForObject("http://cloud-producer/user/"+id, User.class); } public User queryUserHystrix(int id) { return new User(-666,"trek","no server"); }
我们在方法的调用上面添加了一个注解,其中我们指定了fallback方法.
环境的验证处理:
我们启动eureka和consumer,此时服务的提供者是不存在的,因此我们的调用一定出出现问题.
我们看看加入了Hystrix之后,我们的调用的情况是怎么样的.
我们发现现在我们的微服务实现了容错的功能.
三 .Feign之中Hystrix的使用.
[1]添加依赖
[2]修改启动类
[3]修改配置文件的内容
feign: hystrix: enabled: true
[4]添加fallback方法
@FeignClient(value="cloud-producer",fallback=UserHystrix.class) public interface UserFeign { @GetMapping("/user/{id}") User queryUserByid(@PathVariable("id") int id) ; }
一旦出现问题,就会回调上面的配置类.
@Component public class UserHystrix implements UserFeign{ @Override public User queryUserByid(int id) { return new User(-666,"trek","no server"); } }
此外,springcloud也为我们提供了另外的一种方式,实现FallBackFactory,这样可以获取异常信息.
@FeignClient(value="cloud-producer",fallbackFactory=UserHystrixFactory.class) public interface UserFeign { @GetMapping("/user/{id}") User queryUserByid(@PathVariable("id") int id) ; }
此时,我们添加的fallback为一个工厂对象.
@Component public class UserHystrixFactory implements FallbackFactory<UserFeign>{ @Override public UserFeign create(Throwable throwable) { return new UserFeign() { @Override public User queryUserByid(int id) { System.out.println(throwable); return new User(-666,"trek","no server"); } }; } }