spring cloud: Hystrix(五):如禁止單個FeignClient使用hystrix


spring cloud: Hystrix(五):如禁止單個FeignClient使用hystrix

首先application.yml / applicatoin.propreties的配置項:feign.hystrix.enabled=true是針對全局的。

feign.hystrix.enabled=true

或者
feign:
        hystrix:
                  enabled: true

 

那么怎么配置禁止單個的FeignClient使用hystrix呢。

在自定義的configuration.java的配置文件里加入:

       //關閉feign的hystrix
	@Bean
	@Scope("property")
	public Feign.Builder feignBuilder()
	{
		return Feign.builder();
		
	}

  

例子:復寫Feign的默認配置(fooConfiguration.java)

看例子:

 

1.入口文件,開啟eureka, feign配置

@EnableEurekaClient
@SpringBootApplication
@EnableFeignClients
public class FeignApp {


	public static void main(String[] args) {
		SpringApplication.run(FeignApp.class, args);
	}
}

  

 

2.復寫Feign的默認配置(fooConfiguration.java, fooConfiguration2.java,這兩個文件一個是關閉hystrix的,一個沒有關閉)

a.返回默認的feign配置

@Configuration
public class FooConfiguration {

	@Bean
	public Contract feignContract()
	{
		return new feign.Contract.Default();
	}
	
}

  

b.返回默認的feign配置,以及關閉Hystrix

@Configuration
public class FooConfiguration2 {

	/**
	 * 配置Url用戶和密碼,當eureka啟用用戶名和密碼時
	 * @return
	 */
	/*@Bean
	public BasicAuthRequestInterceptor basicAuthRequestInterceptor()
	{
		return new BasicAuthRequestInterceptor("root", "root123");
		
	}*/
	
	//默認配置
	@Bean
	public Contract getContract()
	{
		return new feign.Contract.Default();		
		
	}
	
	//feign日志配置
	@Bean
	Logger.Level feignLoggerLevel()	
	{
		return Logger.Level.FULL;
	}
	
	
	//關閉feign的hystrix
	@Bean
	@Scope("prototype")
	public Feign.Builder feignBuilder()
	{
		return Feign.builder();
		
	}
	
}

  

 

3.FeignClient的代碼

a.調取spring-boot-user服務器

@FeignClient(name="spring-boot-user", configuration=FooConfiguration.class, fallback=HystrixClientFallback.class)
public interface UserFeignClient {

	/**
	 * 代用feign原生模式
	 * @param id
	 * @return
	 */
	@RequestLine("GET /simple/{id}")
	public User findById(@Param("id") Long id);
}

  

b.調取eureka的apps/serviceName(要填入具體項目名稱)服務

/**
 * 當@FeignClient有name和url還有configuration時,取值為url的地址,name只是為一個名稱而已(無意義)
 * 當@FeignClient只有name和configuration時,name的取值為eureka中的application項目的名稱即虛擬地址
 * @author Administrator
 *
 */
@FeignClient(name="boot-user", url="http://localhost:8761", configuration=FooConfiguration2.class, fallback=HystrixClientFallback2.class)
public interface UserFeignClient2 {

	
	
	@RequestLine("GET /eureka/apps/{serviceName}")
	public String findServiceInfoFromEurekaByServiceName(@Param("serviceName") String serviceName);
	
	//@RequestLine("GET /simple/{id}")
	//public User findById(@Param("id") Long id);
}

  

 

4.fallback方法,hystrix的斷容器代碼

a.

@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;
	}

	

}

  

b.直接返回字符

@Component
public class HystrixClientFallback2 implements UserFeignClient2 {

	@Override
	public String findServiceInfoFromEurekaByServiceName(String serviceName) {
		// TODO Auto-generated method stub
		return "hahah";
	}

}

  

 

5.controller代碼

@RestController
public class UserController {

	@Autowired
	private UserFeignClient userFeignClient;
	
	@Autowired
	private UserFeignClient2 userFeignClient2;

	
	@GetMapping("/simple/{id}")
	  public User findById(@PathVariable Long id) {
	    return this.userFeignClient.findById(id);
	  }	

	
	@GetMapping("/eureka/apps/{serviceName}")
	public String findEurekaInfo(@PathVariable String serviceName) {
		return this.userFeignClient2.findServiceInfoFromEurekaByServiceName(serviceName);
	}
	
}

  

6測試

a.eureka服務,spring-boot-user服務未關閉的情況

 

b.eureka服務器、spring-boot-user服務器關閉

 

 

 

  

 


免責聲明!

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



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