如何禁用单个FegionClient的Hystrix的支持

  • 正常操作

application.yml

spring:
  application:
    name: microservice-consumer-movie-feign-customizing-without-hystrix
server:
  port: 7901
eureka:
  client:
    healthcheck:
      enabled: true
    serviceUrl:
      defaultZone: http://user:password123@localhost:8761/eureka
  instance:
    prefer-ip-address: true
logging:
  level:
    com.itmuch.cloud.feign.UserFeignClient: DEBUG

# 解决第一次请求报超时异常的方案:
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 5000
# 或者:
# hystrix.command.default.execution.timeout.enabled: false
# 或者:

# 超时的issue:https://github.com/spring-cloud/spring-cloud-netflix/issues/768
# 超时的解决方案: http://stackoverflow.com/questions/27375557/hystrix-command-fails-with-timed-out-and-no-fallback-available
# hystrix配置: https://github.com/Netflix/Hystrix/wiki/Configuration#execution.isolation.thread.timeoutInMilliseconds
UserFeignClient.java——内容
@FeignClient(name = "microservice-provider-user", configuration = Configuration1.class, fallback = HystrixClientFallback.class)
public interface UserFeignClient {
  @RequestLine("GET /simple/{id}")
  public User findById(@Param("id") Long id);
}
Configuration1.java内容
@Configuration
public class Configuration1 {
  @Bean
  public Contract feignContract() {
    return new feign.Contract.Default();
  }

  @Bean
  Logger.Level feignLoggerLevel() {
    return Logger.Level.FULL;
  }
}
HystrixClientFallback.java——内容
@Component
public class HystrixClientFallback implements UserFeignClient {

  @Override
  public User findById(Long id) {
    User user = new User();
    user.setId(0L);
    return user;
  }
}
  • 禁用操作

UserFeignClient2.java——hystrix支持文档地址:https://projects.spring.io/spring-cloud/spring-cloud.html#spring-cloud-feign-hystrix

文档模版

@FeignClient(name = "hello", fallback = HystrixClientFallback.class)
protected interface HystrixClient {
    @RequestMapping(method = RequestMethod.GET, value = "/hello")
    Hello iFailSometimes();
}

static class HystrixClientFallback implements HystrixClient {
    @Override
    public Hello iFailSometimes() {
        return new Hello("fallback");
    }
}
@FeignClient(name = "xxxx", url = "http://localhost:8761/", configuration = Configuration2.class, fallback = FeignClient2Fallback.class)
public interface FeignClient2 {
  @RequestMapping(value = "/eureka/apps/{serviceName}")
  public String findServiceInfoFromEurekaByServiceName(@PathVariable("serviceName") String serviceName);
}
Configuration2.java内容
@Configuration
public class Configuration2 {
  @Bean
  public BasicAuthRequestInterceptor basicAuthRequestInterceptor() {
    return new BasicAuthRequestInterceptor("user", "password123");
  }

  @Bean
  @Scope("prototype")
  public Feign.Builder feignBuilder() {
    return Feign.builder();
  }
}
FeignClient2Fallback.java——内容
public class FeignClient2Fallback implements FeignClient2 {

  @Override
  public String findServiceInfoFromEurekaByServiceName(String serviceName) {
    return "haha";
  }

}
  • 禁用测试eureka

ApplicationAMIsAvailability ZonesStatus
MICROSERVICE-CONSUMER-MOVIE-FEIGN-CUSTOMIZING-WITHOUT-HYSTRIXn/a(1)(1)UP (1) - MTC-20180821VUN:microservice-consumer-movie-feign-customizing-without-hystrix:7901
MICROSERVICE-PROVIDER-USERn/a(1)(1)UP (1) - microservice-provider-user:192.168.4.160:7900

GET http://192.168.4.160:7901/microservice-provider-user 在user服务没有停掉的情况下会到FeignClient2.java

问:如果user服务停掉呢?

答:会返回默认的user对象。

           

F5多请求几次,打开断路器 http://192.168.4.160:7901/health

            

问:如果把eureka也停掉呢?

答:会返回默认的user对象。

分析:按理说返回haha

       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值