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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM