zoukankan      html  css  js  c++  java
  • 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服务器关闭

      

  • 相关阅读:
    反向传播错漏百出小推导
    使用git遇到的
    Cost Function in Logistic Regression and Neural Network
    鼠标左键长按功能的实现
    同类控件的统一操作(以TCHECKBOX为例)
    HLP帮助文件源文件RTF文件的编写
    FORMAT 的用法
    DELPHI6中DSGNINTF.DCU找不到时的解决方法
    使窗体处于可“移动”,可改变“大小”状态中
    系统菜单的控制,使菜单项灰显及恢复功能
  • 原文地址:https://www.cnblogs.com/achengmu/p/9847655.html
Copyright © 2011-2022 走看看