请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

feign在配置文件配置超时无效

    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
    </properties>
hystrix:
  command:
    #    default: #全局配置服务配置超时
    #      execution:
    #        isolation:
    #          thread:
    #            timeoutInMilliseconds: 5000
    feignHystrixTestOverTime:   #单独为某个方法配置超时时间
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 3000
feign:  #feign使用Hystrix
  hystrix:
    enabled: true
  client:
    config:
      feignHystrixTestOverTime:
        connectTimeout: 3000
        readTimeout: 3000
@RestController
@RequestMapping("/Hystrix")
public class HystrixFeignController {
    @Autowired
    private RibbonServerClient ribbonServerClient;

    @GetMapping("/FeignHystrixTestOverTime")
    @HystrixCommand
    public String feignHystrixTestOverTime() {

        return ribbonServerClient.feignOverTime();
    }
@FeignClient(name = "server", fallback = RibbonServerClient.RibbonServerFallback.class)
public interface RibbonServerClient {

    /**
     * 测试请求 Feign 使用 Hystrix
     * @Method: GET
     * @author show
     * @date 18:12 2019/6/19
     * @return java.lang.String
     */
    @GetMapping("/HystrixServer/HystrixOverTimeTest")
    String feignOverTime();

    /**
     * 服务降级触发类
     * @author xuanweiyao
     * @date 18:15 2019/6/19
     * @Component 作为组件
     */
    @Component
    @Slf4j
    class RibbonServerFallback implements RibbonServerClient {

        @Override
        public String feignOverTime() {
            // 触发服务降级返回
            log.info("feign接口请求异常,触发断路器,返回null");
            return "feign接口请求异常,触发断路器,返回null";
        }
    }
}

请求过去的服务是延时2秒返回的,不知道为什么feign不能针对方法名进行超时配置。
请问老师,feign应该如何针对方法名配置。

正在回答 回答被采纳积分+3

1回答

廖师兄 2019-06-20 21:50:43

Greenwich版本太新,问题很多,先保持和我课程里一样的版本

0 回复 有任何疑惑可以回复我~
  • 提问者 主打情歌 #1
    和版本无关,和ribbon加hystrix的超时机制有关,只要Hystrix的超时时间大于Ribbon的超时时间就没问题了,应该是两个线程冲突了。当Feign配合Hystrix一起用的,要同时配置ribbon.ReadTimeout和Hystrix的timeoutInMilliseconds,且ribbon时间要小于timeoutInMilliseconds,不然会出现HystrixRuntime异常。
    这个微服务课程,案例太少了。
    回复 有任何疑惑可以回复我~ 2019-06-20 22:54:11
  • 廖师兄 回复 提问者 主打情歌 #2
    只要Hystrix的超时时间大于Ribbon的超时时间就没问题了。是要的。熔断是最最终的做法。如果熔断时间比ribbon时间还短,那服务自己通信必然出问题。一门课内容有限,无法面面俱到,还请谅解。
    回复 有任何疑惑可以回复我~ 2019-06-24 15:32:20
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信