一、问题描述

自己有一个微服务项目,使用了GateWay进行限流处理;但是最近发现,无论如何,系统都登陆不上去了,出现了问题:

  1. 控制台总是提示Flipping property: system-server.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647;如下图所示:
    在这里插入图片描述2. 登陆界面一直提示系统繁忙:
    在这里插入图片描述
  2. 然而,认证服务却提示登陆成功:
    在这里插入图片描述

二、思考

  1. 考虑到使用了GateWay进行限流处理,以及Nacos进行服务注册与发现,又使用了Feign进行服务调用,现在的问题是:
    认证服务(被调着)响应的结果与服务请求着接受到的结果出现了偏差,因此,我将解决问题的方向定位在了GateWay上面;然后一路摸索,果然发现了端倪:
    仔细看界面的请求时间:
    在这里插入图片描述
    也就是说,登陆认证服务请求了大概10s的时间,然后就取消了;然后我们再来看看网关的限流配置:
# hystrix 信号量隔离,5秒后自动超时
hystrix:
#  enabled: true
#  shareSecurityContext: true
  command:
    default:  # 默认
      execution:
        isolation:
          strategy: SEMAPHORE
          thread:
            timeoutInMilliseconds: 5000
    fallbackCmd:
      execution:
        isolation:
#          strategy: SEMAPHORE
          thread: # 5秒没响应自动熔断 跳转到配置的fallbackUri
            timeoutInMilliseconds: 5000
  1. 问题的关键,就在于timeoutInMilliseconds: 5000这一行配置上面;

三、解决问题

由二我们得知,出现上述问题的主要原因,就是我们的hystrix熔断时间设置得太短了;因此,只要我们将熔断时间设置长一点,这个问题就迎刃而解了:

hystrix:
#  enabled: true
#  shareSecurityContext: true
  command:
    default:  # 默认
      execution:
        isolation:
          strategy: SEMAPHORE
          thread:
            timeoutInMilliseconds: 70000
    fallbackCmd:
      execution:
        isolation:
#          strategy: SEMAPHORE
          thread: # 5秒没响应自动熔断 跳转到配置的fallbackUri
            timeoutInMilliseconds: 70000
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐