spring-cloud feign hystrix配置熔断为什么不生效的原因

今天特地测试了用feign来作为负载均衡器做测试,配置很简单,而且也能很好的工作,但突然,我想既然用了feign,干脆也把熔断也测试了,也就是hystrix支持的熔断. 没想到反而在这个上面花了不少时间。死活不进入熔断配置的方法。一般报两种错:
1. Service Look up error: Load balancer does not have available server for client...
2. feign connection refused: connect executing get, 也就是找不到微服务,连接不上,因为熔断测试的时候是停止微服务测试的。

其实对于第一种错误,也许可以参考github上面的说明:https://github.com/spring-cloud/spring-cloud-netflix/issues/746, fetching the registry is how eureka is able to tell ribbon (loadbalancer) about what servers are available. 所以我们需要在EUREKA SERVER的工程配置文件里面加上这样的配置:
程序代码 程序代码

server:
  port: 8761
eureka:
  server:
    enable-self-preservation: false       # 关闭自我保护模式(缺省为打开)
    eviction-interval-timer-in-ms: 1000   # 续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)
  client:
    register-with-eureka: false
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:8761/eureka

注意 eureka.client.fetch-registry=true 这句,非常重要,这是用ribbon来做负载均衡的,一定要启用。

对于第二个问题,可能是我自己一直忽略的问题,微服务断掉了,连接不上,是正常的。但我代码里面是加入了熔断fallback配置的,应该走到熔断哪里去呀。不应该报connection refused这样的错误呀。其实就是自己少了一个配置:
程序代码 程序代码

server:
  port: 3333

spring:
  application:
    name: client-consumer-feign

eureka:
  instance:
    instance-id: ${spring.application.name}:${server.port}
    prefer-ip-address: true
    lease-renewal-interval-in-seconds: 5
    lease-expiration-duration-in-seconds: 15
  client:
    healthcheck:
      enabled: true
    serviceUrl:
      defaultZone: http://localhost:8761/eureka
feign:
  hystrix:
    enabled: true    


注意最后面的feign.hystrix.enable=true, 这是启用熔断的开关,一定要开启。好了,搞定了这两点,很自然的熔断生效了。又浪费了两个小时,真是坑呀。后面,干脆把我的代码也上传上来做个备份。


下载文件 spring-boot-microservice sample
下载文件 spring-cloud-eureka-server
下载文件 spring-cloud-feign-hystrix-sample


除非申明,文章均为一号门原创,转载请注明本文地址,谢谢!
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: spring-colud
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.