2013-12-13 19 views
5

Service StackのRedisClientのBlockingDequeueを使用して、処理できるようになるまでデータを保持しています。呼び出し元のコードはサービススタックRedisサーバ再起動後に再接続する

using (var client = ClientPool.GetClient()) 
      return client.As<TMessage>().Lists[_channel].BlockingDequeue(timeout); 

ようRedisのをホストするサーバーが再起動されると、BlockingDequeueの接続は、ゾンビを行く、決してクライアントアプリケーションが再起動されるまで戻り見えます。

BlockingDequeueとPooledConnectionManagerでタイムアウトを設定しようとしましたが、いずれも役に立ちませんでした。サーバー側でタイムアウトが強制されているため、推測しています。

このタイプのフォールトトレランスはサービススタックに組み込まれていますが、それはありませんか?

これは実装で処理する必要がありますか?もしそうなら、推奨されるアプローチはありますか?

答えて

1

ServiceStack.Redisサブスクリプションコードで同じ問題が発生しましたが、retrycount、retrytimeoutなどのいくつかの設定を試しましたが、いずれも機能しませんでしたが、後でRedisExceptionをキャッチして再度サブスクライブしてください。

関連する問題