問題タブ [circuit-breaker]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - オブジェクトがロックされていない場合、Monitor.TryEnter は false を返します
サービスにサーキット ブレーカーを実装しています。すべてのアクションをタイムアウトでラップするという事実を除いて、これは非常に標準的なサーキット ブレーカーです。そのため、タイムアウトが多すぎるとサーキットも中断します。サーキット ブレーカーがハーフ オープン状態になると、MonitorTryEnter
メソッドを使用して、1 つのスレッドのみがアクションを実行するようにします (サービスが回復したかどうかを確認するため)。以下のスニペットを見つけてください (これはハーフオープン状態で実行されるコードです):
EDIT(機能コード全体を貼り付け)
上記のスニペットでわかるように、TryEnter は Try/Finally でラップされているため、何があってもロックが解放されます。私が抱えている問題は、ある時点Monitor.TryEnter
ですべての試行に対して false を返し始めることです。コードをデバッグしたところ、発生する前にすべてのMonitor.TryEnter
呼び出しでMonitor.Exit
が実行されることがわかりました。つまり、ロックを解除する必要がありますが、この時点ではすべての呼び出しが false を返すわけではないようです。これがどのように可能かはわかりません。
何らかの理由でロックが解除されない可能性はMonitor.Exit
ありますか (ただし、例外はスローされません)。それとも、私はここで何か間違ったことをしていますか?
編集。これが _halfOpenSyncObject の宣言方法です (このクラスのインスタンスは 1 つだけです)。
HalfOpen 実装の編集:
project-reactor - resilience4j Spring webflux アプリケーションでサーキット ブレーカーを使用するときにエラーを処理する方法
現在、回路が開くと、接続は応答なしで開いたままになります。
サーバーを停止すると、ブラウザーに次のように表示されます。
次の方法を知りたいです。
1) ハングした接続の問題を解決します。
2) フォールバックとして何かを返します。たとえば、空の Flux です。
ログ:
回線が開いているときの一連の呼び出し、最後の呼び出しは永久に待機します。
spring-cloud-netflix - 既存のリクエストの実行を停止して、hystrix でフォールバック メソッドを停止して実行する方法
hystrix では、execution.isolation.thread.timeoutInMilliseconds
この構成を使用して特定の時間に応答を制限していますが、それ以外の場合はフォールバック メソッドを使用していますが、この設定はバックエンドで呼び出された要求も実行しています。それも停止することはできますか?