1

タイムアウト時にクリーンアップが必要な Hystrix コマンドがあります。これを処理するための現在のアプローチは次のとおりです。

public class MyCommand extends HystrixCommand<MyResponse> {

    @Override
    public MyResponse run() {
        // do stuff

        // Cleanup if timed out
        if( this.isResponseTimedOut() ) {
           // perform cleanup
        }

        return myresponse;
    }
}

Hystrix フレームワークはそのための別の方法を提供しますか?

4

1 に答える 1

1

私の知る限りrun()、タイムアウトが発生した場合、メソッド内で確実に判断することはできませんrun()。呼び出し元が待機している間、メソッドは別のスレッドで実行されています。タイムアウトが発生した場合にメソッドをチェックインしているrun()ときに、呼び出し元のスレッドがタイムアウトになる可能性があり、それについてはわかりません。あなたが提案するコードはほとんどの場合機能しますが、各呼び出しには機能しない小さな時間枠があります。

タイムアウトが発生したかどうかを確認するための保存場所はfallback()メソッドになります。メソッドで説明されている元の「do stuff」は、この時点でまだ実行されている可能性があることに注意してください。Hystrix は元のrun()メソッド aを送信しjava.lang.Thread.interrupt()ます。あなたの「やること」に応じて、結果は異なる場合があります。

これがあなたの質問に対する答えであることを願っています。質問でさらに情報を提供できる場合は、回答を更新してそれを含めることができます。

于 2015-06-13T21:22:05.413 に答える