私は+ 装う + Hystrixリボンを使用して春ブート(1.5.1)といくつかのサービスを作成しようとしています(と私のサービスの発見は、ばねboot-ある飼育係)とIドン'はズールを使用します。春のブートクラウド+リボン+ Feign + Hystrix +飼い葉桶:何が起こっているのは再試行ですか?
私はそれが道を以下に動作するはず思考(ナイーブ)であった:
は(@FeignClient
による注釈付き)装う方法を呼び出す - 送信するので、もしそれが、リボンによって何らかの方法でバランス負荷であるいくつかのHTTPリクエストに変換要求が失敗すると、同じタイプ/名前の次のサービスで再試行するようにリボン設定(つまり、myservice.ribbon.MaxAutoRetriesNextServer=2
)を試み、最後にすべての再試行が失敗した場合、Hystrixフォールバック方式を呼び出します。
@Autowired
private MyServiceClient myServiceClient;
public Response doSomething() {
return myServiceClient.foo(new Object());
}
は、すべてのサービスがある:
だから私の装うインタフェースHystrix FallbackFactory定義
@FeignClient(value = "myservice", fallbackFactory = HystrixMyServiceFallbackFactory.class)
@RibbonClient(name = "myservice")
public interface MyServiceClient {
@RequestMapping(value = "/foo", method = RequestMethod.POST)
Response foo(Object data);
}
は、私は次の行を持って私のコードで
public class HystrixMyServiceFallbackFactory implements FallbackFactory<MyServiceClient > {
@Override
public MyServiceClient create(final Throwable throwable) {
return new MyServiceClient() {
@Override
public Response foo(Object data) {
return new Response(-1, "Failed");
}
};
}
}
どこかにいくつかのデフォルトの応答を返します(私はMyServiceの2つを持っています)、リボンはいいラウンドRobbinでうまく動作しますが、 MyServiceインスタンスの1つをシャットダウンすると、RibbonはRound Robbinで処理を続行するため、2回おきにHystrix Fallbackの結果が返されます(リボンは他のサービスでリトライする必要がありますか?更新されます。
誰もがこれをどのように一緒に働かせるか説明できますか?
Thx、この構成が見つかりました。しかし、私の意見では、マイクロサービス環境では少し問題になる可能性があります。私が5つの "サービス"を持っていて、2つが遅い場合、それは問題を解決しません:または私はすべての "サービス"コンポーネントを(Hystrix経由で)無効にするか、hystrixを無効にします。ちょっと考えた後、私はそれを解決することに決めました。健康指標を改善するため、「悪いサービス」は健康でないとマークされ、リストからのサービス発見によって削除されます。私はまだ遅いサービスでは "問題"がありますが、遅くて何が "悪い"サービスとしてマークするかを定義する必要があるかもしれません。 –