バックグラウンド
WindowsサービスでRESTWebサービスを呼び出していますが、HttpWebRequest
を使用しBlockingCollection<T>
てプロデューサー/コンシューマーパターンを実装しています。502 Bad Gateway
時々、私のWebサービスはまたはに戻ります503 Service Unavailable
。
Webサービスが氾濫していると95%確信しています。したがって、これらの応答のいずれかを取得するたびに、クライアント側で要求を抑制したいと思います。
質問
どのタイプのセマフォを使用する必要がありますか?.Net 4/4.5タイプは問題ありません。これが私の提案したソリューションの擬似コードです。コンシューマーは並行して実行されます。
class Worker {
Semaphore _cooldown = new Semaphore();
void Run() {
StartProducersInParallel();
StartConsumersInParallel();
}
void Produce() {...}
void Consume() {
_cooldown.Wait(1000);
try {
var response = proxy.GetResponse();
} catch (ex) {
if (ex.Status == 502 || ex.Status == 503) {
_cooldown.Signal();
// ... wait here and then retry once
}
}
}
}