web-dev-qa-db-ja.com

長いリクエストでZuulがタイムアウトする

Zuulプロキシ(@EnableZuulProxy)として機能するフロントエンドのスプリングクラウドアプリケーション(マイクロサービス)を使用して、外部ソースからスプリングクラウド(スプリングブート)を使用して記述された他の内部マイクロサービスにリクエストをルーティングします。
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転送のタイムアウトを変更する方法はありますか。これには、どのようなアクセス可能なパラメーター設定があります。

私はリリースの途中で、これがちょうど現れました:)

40
EvilJinious1

設定するプロパティは次のとおりです。ribbon.ReadTimeout全般および<service>.ribbon.ReadTimeout特定のサービスの場合、ミリ秒単位。 リボンwiki にはいくつかの例があります。 このjavadoc にはプロパティ名があります。

33
spencergibb

私の場合、次のプロパティを変更する必要がありました。

zuul.Host.socket-timeout-millis=30000
31
acohen

私は同じ問題を経験しました:長いリクエストで、Zuulのhystrixコマンドはribbon.ReadTimeout=10000を設定しているにもかかわらず約1秒後にタイムアウトし続けました。

タイムアウトを完全に無効にすることで解決しました:

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

動作する代替手段は、ZuulのHystrix分離戦略をTHREADに変更することです。

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

長時間実行されるリクエストのタイムアウトをzuulに強制的に停止させるために、2つのタイムアウトを変更する必要がありました。ヒステリシスタイムアウトが無効になっている場合でも、リボンはタイムアウトします。

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

これは私のために働いた、私はapplication.ymlで接続とソケットのタイムアウトを設定する必要がありました:

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

Zuulがサービス検出を使用する場合、これらのタイムアウトをribbon.ReadTimeoutおよびribbon.SocketTimeoutリボンプロパティで構成する必要があります。

URLを指定してZuulルートを設定した場合、zuul.Host.connect-timeout-millisおよびzuul.Host.socket-timeout-millisを使用する必要があります

私が意味するルートで

zuul:
  routes:
    dummy-service:
      path: /dummy/**
3
jayant mishra

同様の問題があり、timeoutをグローバルに設定しようとしていました。また、Hystrixおよびリボンが重要です。

たくさんの時間を費やした後、私はこの解決策を見つけました。膨大なデータのため、私のサービスは最大50秒かかっていました。

タイムアウトのデフォルト値を変更する前に考慮すべき点:

Hystrix時間は、RibbonReadTimeoutおよび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

参照

1
Wiqi

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

それが誰かを助けることを願っています!

0
rsb2097