【问题标题】:Spring cloud - Zuul cannot set timeoutSpring cloud - Zuul 无法设置超时
【发布时间】:2018-01-23 04:26:53
【问题描述】:

我有一个 zuul 服务器,其配置文件为:

server:
  port: 9090
eureka:
  client:
    serviceUrl:
      defaultZone: http://172.16.5.147:8761/eureka/
  instance:
    leaseRenewalIntervalInSeconds: 30
    hostname: dev-zuulserver
    non-secure-port: 80
zuul:
          prefix: /v1
          sensitiveHeaders: Cookie, Set-Cookie
          ignoredHeaders: Access-Control-Allow-Origin
          host:
            connect-timeout-millis: 60000 # starting the connection
            socket-timeout-millis: 120000  # monitor the continuous incoming data flow
        ribbon:
          eureka:
            enabled: true
            ReadTimeout: 120000
            ConnectTimeout: 3000
        hystrix:
          command:
            default:
              execution:
                isolation:
                  strategy: THREAD
                  thread:
                    timeoutInMilliseconds: 60000

我有一些超时时间较长(超过一分钟)的查询。但是,我所有的请求总是出错并超时,请求时间总是小于 6000 毫秒。

而 zuul 显示此异常:

原因:java.lang.RuntimeException:java.net.SocketTimeoutException:读取超时

在 rx.exceptions.Exceptions.propagate(Exceptions.java:58) ~[rxjava-1.1.10.jar!/:1.1.10]
在 rx.observables.BlockingObservable.blockForSingle(BlockingObservable.java:465) ~[rxjava-1.1.10.jar!/:1.1.10] 在 rx.observables.BlockingObservable.single(BlockingObservable.java:342) ~[rxjava-1.1.10.jar!/:1.1.10] 在 com.netflix.client.AbstractLoadBalancerAwareClient.executeWithLoadBalancer(AbstractLoadBalancerAwareClient.java:117) ~[ribbon-loadbalancer-2.2.2.jar!/:2.2.2] ...省略了133个常用框架 引起:java.net.SocketTimeoutException:读取超时 在 java.net.SocketInputStream.socketRead0(Native Method) ~[na:1.8.0_131] 在 java.net.SocketInputStream.socketRead(SocketInputStream.java:116) ~[na:1.8.0_131] 在 java.net.SocketInputStream.read(SocketInputStream.java:171) ~[na:1.8.0_131] 在 java.net.SocketInputStream.read(SocketInputStream.java:141) ~[na:1.8.0_131] 在 org.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:137) ~[httpcore-4.4.6.jar!/:4.4.6] 在 org.apache.http.impl.io.SessionInputBufferImpl.fillBuffer(SessionInputBufferImpl.java:153) ~[httpcore-4.4.6.jar!/:4.4.6] 在 org.apache.http.impl.io.SessionInputBufferImpl.readLine(SessionInputBufferImpl.java:282) ~[httpcore-4.4.6.jar!/:4.4.6] 在 org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:138) ~[httpclient-4.5.3.jar!/:4.5.3] 在 org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:56) ~[httpclient-4.5.3.jar!/:4.5.3] 在 org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259) ~[httpcore-4.4.6.jar!/:4.4.6] 在 org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:163) ~[httpcore-4.4.6.jar!/:4.4.6] 在 org.apache.http.impl.conn.CPoolProxy.receiveResponseHeader(CPoolProxy.java:165) ~[httpclient-4.5.3.jar!/:4.5.3] 在 org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273) ~[httpcore-4.4.6.jar!/:4.4.6] 在 org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125) ~[httpcore-4.4.6.jar!/:4.4.6]

有人对此案有解决方案吗?

谢谢!

【问题讨论】:

  • 您应该将 hystrix 超时设置为长于功能区超时。
  • 请查看此链接 stackoverflow.com/a/44918316/9183844

标签: spring timeout cloud netflix-zuul


【解决方案1】:

尝试在 ZUUL 配置中为 Ribbon 添加超时。
以下将设置超时 2 分钟。

ribbon:
  ConnectTimeout: 120000
  ReadTimeout: 120000

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 2023-03-11
    • 2018-08-10
    • 2016-09-10
    • 2017-09-29
    • 2020-11-27
    • 2016-06-24
    相关资源
    最近更新 更多