サービスのポリーNETコアマイクロ吹き戦略
私たちがご紹介していきその後1 ポリーに、このライブラリを
定着戦略(サーキットブレーカー)
呼び出しは残業が多すぎるサービスの対象であり、異常が現れた場合は、ヒューズ中のサービス要求は、ターゲットのサービスを呼び出しますが、直接返され、資源の節約、サービスの安定性を改善していきません溶断時間の一定期間内に電話を取ることができます定着サイクルの終了後に目標は、状況改善サービスコールを復元する場合。
注:安定性サービスでは、実行が再試行複数必要で、リトライ戦略(戦略を再試行し、少し興味を持ってパートナーが私の最後の、または自己検索を見ることができる)、可能性を防止するための戦略の最適な組み合わせを融合リスク。
吹き状態
- オープン(オープン)
ヒューズオープンは、ターゲットサービスへの呼び出しが直接セミオープン状態に入り、ネットワークリクエストのヒューズサイクル内で行っていない、エラーを返したときに、サイクルの終わりにヒューズ。
- 閉じる(クローズ)
通常のネットワーク要求が閉じた状態で起こるが、吹き状態に、(しきい値に達していない前に、累積回数が前にゼロになり、正常に戻った場合)エラーの数が設定閾値に達した場合、連続的吹き付け実行回数は、条件が記録され満たします開いた状態に。
- ハーフオープン(ハーフオープン)
呼び出しが成功した(または一定の割合)であれば量的そうよくないと考えられ、ヒューズをオフにし、復元されたとみなされ、サービス要求の半開状態の下で許可され、私は戻ってヒューズオープン状態に行ってきました。
ヒューズ命令
// 3連続異常吹き付け、吹き付け状態の後、1分間保持し、発信者が回路遮断器の異常情報を受信する ポリシー .handle <SomeExceptionType>() .CircuitBreaker(3、TimeSpan.FromMinutes(1))。
ヒューズコードのテスト
静的int型= 0タイムズプライベート、 パブリック静的な無効TestPolicy() { VAR = circuitBreakerPolicyポリシー .handle <例外>() .CircuitBreaker( // :. 4 ,. 4回exceptionsAllowedBeforeBreaking例外 durationOfBreak:TimeSpan.FromMinutes(1)、//オフ離れて1分 onBreak:(例外、breakDelay)= > // 回路ブレーカ開き Console.WriteLineを、($ + Exception.Message "吹き:{breakDelay.TotalMilliseconds} MS、例外を") onreset:()=> //ヒューズ閉じる Console.WriteLineを(「ヒューズがシャットダウン」)を、 onHalfOpen:()=> //オフ状態から半開状態にし、終了時刻を融合 Console.WriteLineをは( "ハーフオープン状態に入る時間を融合") ); (int型のためにI = 0;私は12である<;私は++)//ヒューズトリガするために、複数の呼び出しをシミュレート { 試み { VARのcircuitBreakerPolicy.Execute結果=を(テスト); Console.WriteLineを(結果); } キャッチ(例外EX) { Console.WriteLineを( "キャッチtry-:" + ex.Message); } のThread.sleep(500); } } プライベート静的文字列試験() { タイムズ++ ; (時間= 0。5%)//模倣特定のエラー状態をスローした場合! { 新しい例外(「例外メッセージ」)を投げます。 } 「成功」を返します。 }
高度な設定を融合
異常なトリガ期間融着の割合で要求の総数:
var advancedCircuitBreakerPolicy = Policy .Handle<Exception>() .AdvancedCircuitBreaker( failureThreshold: 0.5, // 至少50%有异常则熔断 samplingDuration: TimeSpan.FromSeconds(10), // 10秒内 minimumThroughput: 8, // 最少共有多少次调用 durationOfBreak: TimeSpan.FromSeconds(30), onBreak: (exception, breakDelay) => // 断路器打开时 Console.WriteLine($"熔断: {breakDelay.TotalMilliseconds } ms, 异常: " + exception.Message), onReset: () => // 熔断器关闭时 Console.WriteLine("熔断器关闭了"), onHalfOpen:()=> // OFF状態に半開状態から、終了時刻を融着 (「半開状態に入る時間を融合」)Console.WriteLineを )。
あなたはまだ使用することは非常に便利で簡単です見ることができ、そしてアウト種類のゲームがプレイされているプロジェクトのフレームワークと組み合わせることができ、ハッハッハ、興味のある学生の自己古い兄弟やあなたの母親とカザフスタンの度合いができます。あなたを参照してください。