Spring cloud Zuul在长时间请求中超时

Spring cloud Zuul在长时间请求中超时,spring-cloud,netflix-zuul,Spring Cloud,Netflix Zuul,我使用前端Spring云应用程序(微服务)作为Zuul代理()将请求从外部源路由到使用Spring云编写的其他内部微服务(Spring boot)。 Zuul服务器直接来自示例部分中的应用程序 @springboot应用程序 @控制器 @EnableZuulProxy @EnableDiscoveryClient 公共类ZuulServer应用程序{ 公共静态void main(字符串[]args){ 新的SpringApplicationBuilder(ZuulServerApplicatio

我使用前端Spring云应用程序(微服务)作为Zuul代理()将请求从外部源路由到使用Spring云编写的其他内部微服务(Spring boot)。
Zuul服务器直接来自示例部分中的应用程序

@springboot应用程序
@控制器
@EnableZuulProxy
@EnableDiscoveryClient
公共类ZuulServer应用程序{
公共静态void main(字符串[]args){
新的SpringApplicationBuilder(ZuulServerApplication.class).web(true).run(args);
}
}
我在本地运行这组服务,看起来一切正常,但是如果我在有负载的网络上运行它,或者通过VPN,那么我开始看到Zuul转发错误,我在日志中看到客户端超时


有没有办法改变Zuul转发的超时时间,这样我就可以从眼前的问题中消除这个问题?对此有哪些可访问的参数设置?

要设置的属性通常是:
ribbon.ReadTimeout
,以及特定服务的
.ribbon.ReadTimeout
,以毫秒为单位。这本书有一些例子。具有属性名称。

在我的情况下,我必须更改以下属性:

zuul.host.socket-timeout-millis=30000

我也遇到过同样的问题:在长请求中,尽管设置了
ribbon.ReadTimeout=10000
,但Zuul的hystrix命令在大约一秒钟后仍会超时

我通过完全禁用超时解决了这个问题:

hystrix:
  command:
    default:
      execution:
        timeout:
          enabled: false
另一种可行的方法是将Zuul的Hystrix隔离策略更改为线程:

hystrix:
  command:
    default:
      execution:
        isolation:
          strategy: THREAD
          thread:
            timeoutInMilliseconds: 10000

我不得不改变两个超时,以迫使zuul停止超时长时间运行的请求。即使禁用hystrix超时,功能区仍将超时

hystrix:
  command:
    default:
      execution:
        timeout:
          enabled: false
ribbon:
  ReadTimeout: 100000
  ConnectTimeout: 100000 

这对我来说很有效,我必须在
应用程序中设置连接和套接字超时。yml

zuul:
  host:
    connect-timeout-millis: 60000 # starting the connection 
    socket-timeout-millis: 60000  # monitor the continuous incoming data flow

如果Zuul使用服务发现,则需要使用
ribbon.ReadTimeout
ribbon.SocketTimeout
功能区属性配置这些超时

如果通过指定URL配置了Zuul路由,则需要使用
Zuul.host.connect timeout millis
Zuul.host.socket timeout millis

我指的是路线

zuul:
  routes:
    dummy-service:
      path: /dummy/**

只有
application.yml
上的这些设置对我有效:

ribbon:
    ReadTimeout: 90000
    ConnectTimeout: 90000

eureka:
    enabled: true

zuul:
    host:
        max-total-connections: 1000
        max-per-route-connections: 100
    semaphore:
        max-semaphores: 500

hystrix:
    command:
        default:
            execution:
                isolation:
                    thread:
                        timeoutInMilliseconds: 1000000

希望它能帮助别人

我有一个类似的问题,我试图在全局范围内设置超时,以及为HystrixRibbon设置超时的顺序

在花了大量时间之后,我最终得到了这个解决方案。由于数据量巨大,我的服务耗时长达50秒

在更改超时默认值之前考虑:

Hystrix时间应大于功能区的读取超时和连接超时的组合时间

仅对特定服务使用,这意味着不全局设置(不起作用)

我的意思是使用这个:

command:
   your-service-name:
与此相反:

command:
   default:
工作解决方案:

hystrix:
 command:
   your-service-name:
  execution:
    isolation:
      strategy: THREAD
      thread:
        timeoutInMilliseconds: 95000

your-service-name:
 ribbon:
  ConnectTimeout: 30000
  ReadTimeout: 60000
  MaxTotalHttpConnections: 500
  MaxConnectionsPerHost: 100

谢谢你的帮助。我在哪里可以找到所有这些参数的默认设置?这些是configs:com.netflix.client.config.DefaultClientConfigImpl?如果我不使用ribbon,是否可以不仅为ribbon设置此属性?这是不使用ribbon时的解决方案是否可以为每个主机应用此解决方案,以避免将其应用于所有端点?谢谢你非常非常:-)最后一个对我有用!它有一些缺点吗?哦,我的上帝。。再也没有超时了。。谢谢,我不确定,但我认为没有问题。事实上,到目前为止,我们已经在生产中使用,没有任何问题。您可以在这里阅读更多关于为什么信号量是默认实现的信息。要将此隔离用于特定服务:#为单个服务禁用Hystrix超时:
Hystrix.command..execution.timeout.enabled:false
#将Hystrix超时增加到60s(每个服务)
Hystrix.command..execution.isolation.thread.TimeoutIn毫秒数:60000
,谢谢,我上一次登录stackoverflow是在2016年,我不得不登录说谢谢和Upvote,那么具体服务路线的超时时间呢?