Feignでhystrixをオンにする
2217 ワード
サービスAがあり、主に次のように依存しています.
SpringcloudのバージョンはEdgwareです.SR 4、springbootのバージョンは1.5.8です.RELEASEプロファイル:
feignクライアント:
このSOperatorClient#getUserNamesByIdsメソッドをテストすると、サービス降格ロジックが呼び出され続け、aaa-serviceを呼び出そうとしたとさえ感じられず、呼び出しに失敗してエラーを報告するのではなく、直接降格ロジックを呼び出し、その後、資料を調べ、プロファイルに次の構成を追加しました.
呼び出しに成功し、feignでribbonとhystrixのデフォルト構成が本当にゴミだと感慨した.しかし、実際にはribbonとhystrixの構成も芸術であり、1つはリモートコールであり、1つはサービス溶断であるため、いったんいくつかの時間で配置が合理的ではないと、実際には構成されていないのと同じであり、例えばサービス溶断配置の時間はリモートコールの時間よりも小さいので、想像してみてください.リモートコールはまだ終わっていません.ヒューズは呼び出しに失敗したと言っていますが、でたらめではないでしょうか.続いて、aaa-serviceを止めて、サービスのダウングレードをテストしようとしたが、結果はがっかりした.それとも、サービスが何の呼び出しもなくダウングレードしたような気がして、ブラシをかけてしまった.配置されたribbonの接続時間とReadTimeoutは騒いで遊んでいるのだろうか.ログ・レベルをdebugに調整し、もう一度試してみると、実は私が思っていたほどではありません.このようなエラーがあったからです.
つまりaaa-serviceを呼び出したのですが、このサービスが見つからないだけです.しかし、なぜ再試行しなかったのでしょうか.万一、この時点でネットワークのジッタでaaa-serviceが見つからなかったら、呼び出しに失敗したと宣言しますか?プロファイルに次の構成を追加します.
テストの结果、呼び出しに失败した后にもう一度试して、私は明らかに3回试して、まさかこのパラメータは役に立たないで、また、どうしてこのymlファイルは私が上述のこれらのパラメータを配置してすべて私にヒントを与えていませんか?ここに疑問を残して、後で時間があれば解決しに来ます.
org.springframework.cloud
spring-cloud-starter-openfeign
SpringcloudのバージョンはEdgwareです.SR 4、springbootのバージョンは1.5.8です.RELEASEプロファイル:
feign.hystrix.enabled: true
feignクライアント:
@FeignClient(name = "aaa-service", fallback = SOperatorClientFallBack.class)
public interface SOperatorClient {
@RequestMapping("/operator/getName")
Map getUserNamesByIds(@RequestParam("ids") List ids);
}
このSOperatorClient#getUserNamesByIdsメソッドをテストすると、サービス降格ロジックが呼び出され続け、aaa-serviceを呼び出そうとしたとさえ感じられず、呼び出しに失敗してエラーを報告するのではなく、直接降格ロジックを呼び出し、その後、資料を調べ、プロファイルに次の構成を追加しました.
feign.hystrix.enabled: true
ribbon:
ReadTimeout: 10000
ConnectTimeout: 5000
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 20000
呼び出しに成功し、feignでribbonとhystrixのデフォルト構成が本当にゴミだと感慨した.しかし、実際にはribbonとhystrixの構成も芸術であり、1つはリモートコールであり、1つはサービス溶断であるため、いったんいくつかの時間で配置が合理的ではないと、実際には構成されていないのと同じであり、例えばサービス溶断配置の時間はリモートコールの時間よりも小さいので、想像してみてください.リモートコールはまだ終わっていません.ヒューズは呼び出しに失敗したと言っていますが、でたらめではないでしょうか.続いて、aaa-serviceを止めて、サービスのダウングレードをテストしようとしたが、結果はがっかりした.それとも、サービスが何の呼び出しもなくダウングレードしたような気がして、ブラシをかけてしまった.配置されたribbonの接続時間とReadTimeoutは騒いで遊んでいるのだろうか.ログ・レベルをdebugに調整し、もう一度試してみると、実は私が思っていたほどではありません.このようなエラーがあったからです.
java.lang.RuntimeException: com.netflix.client.ClientException: Load balancer does not have available server for client: aaa-service
つまりaaa-serviceを呼び出したのですが、このサービスが見つからないだけです.しかし、なぜ再試行しなかったのでしょうか.万一、この時点でネットワークのジッタでaaa-serviceが見つからなかったら、呼び出しに失敗したと宣言しますか?プロファイルに次の構成を追加します.
feign.hystrix.enabled: true
ribbon:
ReadTimeout: 10000
ConnectTimeout: 5000
MaxAutoRetriesNextServer: 3
ribbon.MaxAutoRetries: 3
OkToRetryOnAllOperations: true
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 20000
テストの结果、呼び出しに失败した后にもう一度试して、私は明らかに3回试して、まさかこのパラメータは役に立たないで、また、どうしてこのymlファイルは私が上述のこれらのパラメータを配置してすべて私にヒントを与えていませんか?ここに疑問を残して、後で時間があれば解決しに来ます.