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服務時

