spring cloud: Hystrix(六):feign的註解@FeignClient:fallbackFactory(類似於斷容器)與fallback方法
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服務時