fallbackFactory(類似於斷容器)與fallback方法
feign的注解@FeignClient:fallbackFactory與fallback方法不能同時使用,這個兩個方法其實都類似於Hystrix的功能,當網絡不通時返回默認的配置數據.
fallback方法的使用:
在入口文件開啟feign注解功能。
@EnableFeignClients
@EnableEurekaClient @SpringBootApplication @EnableFeignClients public class FeignApp { public static void main(String[] args) { SpringApplication.run(FeignApp.class, args); } }
2.寫一個訪問spring-boot-user服務的接口,同時在@FeignClient注解中使用fallback默認返回方法(斷容器)
fallback=HystrixClientFallback.class
@FeignClient(name="spring-boot-user", fallback=HystrixClientFallback.class) public interface UserFeignClient { // 兩個坑:1. @GetMapping不支持 2. @PathVariable得設置value @RequestMapping(value="/simple/{id}", method=RequestMethod.GET) public User findById(@PathVariable("id") Long id); }
3.寫HystrixClientFallback類,並繼承UserFeignClient類,當網絡不通或者訪問失敗時,返回固定/默認內容
@Component public class HystrixClientFallback implements UserFeignClient{ @Override public User findById(Long id) { // TODO Auto-generated method stub User user = new User(); user.setId(0L); return user; } }
4.controller調用spring-boot-user服務的接口
@RestController public class MovieController { @Autowired private UserFeignClient userFeignClient; @GetMapping("/movie/{id}") public User findById(@PathVariable("id") Long id) { return this.userFeignClient.findById(id); } }
fallbackFactory方法的使用
1.入口文件引入feign注解
@EnableEurekaClient @SpringBootApplication @EnableFeignClients public class FeignApp { public static void main(String[] args) { SpringApplication.run(FeignApp.class, args); } }
2.寫feignClient客戶端j,使用feignClient注解的fallbackFactory方法
@FeignClient(name="spring-boot-user", fallbackFactory=HystrixClientFallbackFactory.class) public interface UserFeignClient { // 兩個坑:1. @GetMapping不支持 2. @PathVariable得設置value @RequestMapping(value="/simple/{id}", method=RequestMethod.GET) public User findById(@PathVariable("id") Long id); }
3.寫HystrixClientFallbackFactory類,和HystrixClientWithFallbackFactory類
HystrixClientWithFallbackFactory類繼承UserFeignClient類
public interface HystrixClientWithFallbackFactory extends UserFeignClient { }
HystrixClientFallbackFactory實現FallbackFactory類,並使用內部匿名方法類,繼續UserFeignClient
@Component public class HystrixClientFallbackFactory implements FallbackFactory<UserFeignClient> { @Override public UserFeignClient create(Throwable arg0) { // TODO Auto-generated method stub return new HystrixClientWithFallbackFactory() { @Override public User findById(Long id) { // TODO Auto-generated method stub User user = new User(); user.setId(-1L); return user; } }; } }
4controller調用UserFeignClient接口
@RestController public class MovieController { @Autowired private UserFeignClient userFeignClient; @GetMapping("/movie/{id}") public User findById(@PathVariable("id") Long id) { return this.userFeignClient.findById(id); } }
5調用
當開啟spring-boot-user方法,返回數據
當關閉spring-boot-user服務時