Hystrix をマイクロサービス プロジェクトに実装しようとしています。質問を単純かつ簡潔にするために、以下のシナリオについて説明します。
(a) ときどきパフォーマンスが低下するバックエンド サービスへの呼び出し (支払いサービスなど)
(b) @Hystrix でメソッドに注釈を付けました (支払いサービスを呼び出しているところから)。また、対応するフォールバック メソッドを実装しました。
(c) 以下は、同じコード スニペットです。
@HystrixCommand(fallbackMethod = "fallbackProcessPayment")
public String processPayment(User user) throws Exception
{
// Call the payment service (which is slow in nature) to process the payment for the user....
}
public String fallbackProcessPayment(User user){
// This is the fallback method for processPayment....
// Gracefully handle the processPayment
}
In the config.properties file timeout is configured as
hystrix.command.getUseCase1.execution.isolation.thread.timeoutInMilliseconds=2000
現在の動作 - バックエンドの支払いサービスの呼び出しが processPayment(..) メソッドから行われるとすぐに、hystrix.command.getUseCase1.execution.isolation.thread.timeoutInMilliseconds で設定したよりも長く (~ 4000 ミリ秒) かかります。 (2000 ミリ秒) したがって、Hystrix は fallbackProcessPayment (...) を呼び出しますが、バックエンドの支払いサービスも低速ではありますが実行されるという事実もあります。これは、支払いがバックグラウンドで処理されているため、望ましくない動作です。これは、支払いを処理できないことをユーザーに通知するためです (フォールバック メソッドを介して)。 2 秒以内の応答 (timeoutInMilliseconds 構成に基づく)。
正しく動作させるために欠けている構成はありますか?
これへのポインタは非常に役立ちます。
御時間ありがとうございます
上手。これは、hystrix の予想される動作です。いくつかのオプションがあります。
1. タイムアウトを増やすか
2. フォールバック メソッドで、メソッドが失敗する理由を確認します。つまり、どの例外について。(これを知るThrowable
には、フォールバック メソッドがトリガーされる例外を持つタイプのフォールバック メソッドに引数を追加します)。失敗の原因がタイムアウトの場合は、コードを記述して、応答を返す前に前のプロセスが完了したかどうかを確認できます。
ただし、しきい値を 5 に設定していて、タイムアウトが原因で 5 件のリクエストが失敗した場合、6 番目のリクエストはフォールバック メソッドに直接送信されるため、2 番目のアプローチは実行できません。前のプロセスが完了したかどうかを確認しても意味がありません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加