1. 程式人生 > >spring cloud: Hystrix(六):feign的註解@FeignClient:fallbackFactory(類似於斷容器)與fallback方法

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