Service StackのRedisClientのBlockingDequeueを使用して、処理できるようになるまでデータを保持しています。呼び出し元のコードはサービススタックRedisサーバ再起動後に再接続する
using (var client = ClientPool.GetClient())
return client.As<TMessage>().Lists[_channel].BlockingDequeue(timeout);
ようRedisのをホストするサーバーが再起動されると、BlockingDequeueの接続は、ゾンビを行く、決してクライアントアプリケーションが再起動されるまで戻り見えます。
BlockingDequeueとPooledConnectionManagerでタイムアウトを設定しようとしましたが、いずれも役に立ちませんでした。サーバー側でタイムアウトが強制されているため、推測しています。
このタイプのフォールトトレランスはサービススタックに組み込まれていますが、それはありませんか?
これは実装で処理する必要がありますか?もしそうなら、推奨されるアプローチはありますか?