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服務器關閉
