序文
本日、マイクロサービスコールを使用すると、サービス間のコールがタイムアウトし、エラーが次のように報告されました。
feign.RetryableException: Read timed out executing POST http://******
また、サービスが初めて正常に開始されたときにエラーを報告し、その後通常のアクセスを再開する人もいます。
解決:
最初に、最初の呼び出しが失敗し、それが正常になります。この問題を解決するには、インスタンス化が必要なクラスを、最初に呼び出すときではなく、事前に作成します。
理由:主な理由は、サービスの開始時にリボンがクライアントロードバランシングを実行するクライアントが初期化されないが、サービスが呼び出されると対応するクライアントが作成されるため、時間のかかる最初の呼び出しには送信だけが含まれないHTTPリクエストの時間には、RibbonClientを作成する時間も含まれるため、作成時間が遅く、設定されているタイムアウト期間が比較的短い場合は、上記のように表示されやすくなります。
構成:
#预加载配置,默认为懒加载
ribbon:
eager-load:
enabled: true
clients: zoo-plus-email
zoo-plus-email:
ribbon:
ReadTimeout: 3000
ConnectTimeout: 3000
パラメータの説明:
ribbon.eager-load.enabled:リボンのスターベーションロードモードを有効にします
ribbon.eager-load.clients:ロードする必要があるサービス名を指定します
以下は、単一サービスの構成接続読み取り時間です。
すべてのサービスを構成するようにリボンを構成します。
ribbon:
ReadTimeout: 15000
ConnectTimeout: 60000