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転送のタイムアウトを変更する方法はありますか。これには、どのようなアクセス可能なパラメーター設定があります。
私はリリースの途中で、これがちょうど現れました:)
私の場合、次のプロパティを変更する必要がありました。
zuul.Host.socket-timeout-millis=30000
私は同じ問題を経験しました:長いリクエストで、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
長時間実行されるリクエストのタイムアウトをzuulに強制的に停止させるために、2つのタイムアウトを変更する必要がありました。ヒステリシスタイムアウトが無効になっている場合でも、リボンはタイムアウトします。
hystrix:
command:
default:
execution:
timeout:
enabled: false
ribbon:
ReadTimeout: 100000
ConnectTimeout: 100000
これは私のために働いた、私はapplication.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/**
同様の問題があり、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
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
それが誰かを助けることを願っています!