50

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

@SpringBootApplication
@Controller
@EnableZuulProxy
@EnableDiscoveryClient
public class ZuulServerApplication {
    public static void main(String[] args) {
        new SpringApplicationBuilder(ZuulServerApplication.class).web(true).run(args);
    }
}

我在本地运行了这组服务,一切似乎都运行良好,但如果我在有一定负载的网络上运行它,或者通过 VPN,然后我开始看到 Zuul 转发错误,我在日志中看到客户端超时.

有什么方法可以更改 Zuul 转发的超时时间,以便我可以从我的直接关注中消除这个问题?为此有哪些可访问的参数设置?

4

8 回答 8

40

就我而言,我必须更改以下属性:

zuul.host.socket-timeout-millis=30000
于 2015-09-02T00:06:59.160 回答
37

要设置的属性是:ribbon.ReadTimeout通常和<service>.ribbon.ReadTimeout特定服务,以毫秒为单位。功能区 wiki有一些示例 。此 javadoc具有属性名称。

于 2015-03-06T18:01:25.910 回答
22

我遇到过同样的问题:在长请求中,尽管设置了ribbon.ReadTimeout=10000.

我通过完全禁用超时来解决它:

hystrix:
  command:
    default:
      execution:
        timeout:
          enabled: false

另一种可行的方法是将 Zuul 的 Hystrix 隔离策略更改为 THREAD:

hystrix:
  command:
    default:
      execution:
        isolation:
          strategy: THREAD
          thread:
            timeoutInMilliseconds: 10000
于 2015-12-28T11:41:22.390 回答
20

这对我有用,我必须在以下位置设置连接和套接字超时application.yml

zuul:
  host:
    connect-timeout-millis: 60000 # starting the connection 
    socket-timeout-millis: 60000  # monitor the continuous incoming data flow
于 2017-04-28T12:33:32.863 回答
16

我不得不更改两次超时以强制 zuul 停止对长时间运行的请求进行超时。即使禁用了 hystrix 超时,功能区仍然会超时。

hystrix:
  command:
    default:
      execution:
        timeout:
          enabled: false
ribbon:
  ReadTimeout: 100000
  ConnectTimeout: 100000 
于 2016-09-26T18:32:46.553 回答
7

如果 Zuul 使用服务发现,则需要使用ribbon.ReadTimeoutribbon.SocketTimeoutRibbon 属性配置这些超时。

如果你已经通过指定 URL 配置了 Zuul 路由,你需要使用zuul.host.connect-timeout-milliszuul.host.socket-timeout-millis

我的意思是路线

zuul:
  routes:
    dummy-service:
      path: /dummy/**
于 2018-04-09T13:32:52.213 回答
3

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

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

在更改 Timeout 的默认值之前要考虑的几点:

Hystrix时间应该大于Ribbon ReadTimeout 和 ConnectionTimeout 的组合时间。

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

我的意思是使用这个:

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

参考

于 2019-05-08T16:50:29.143 回答
1

只有这些设置对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

希望它可以帮助某人!

于 2018-04-16T17:36:51.107 回答