2013-12-13 75 views
5

我们使用服务堆栈的RedisClient的BlockingDequeue来保存一些数据,直到它可以被处理。调用代码看起来像Redis服务器重启后服务堆栈Redis重新连接

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

如果托管的Redis重新启动服务器,为BlockingDequeue的连接去僵尸,永不返回,直到客户端应用程序重新启动。

我们已经尝试设置BlockingDequeue以及PooledConnectionManager上的超时,但都没有帮助,我猜测是因为超时在服务器端强制执行。

这种类型的容错内置于服务堆栈中,我们错过了它吗?

或者是我们的实施应该处理的东西?如果是的话,有没有推荐的方法?

回答

1

我们在我们的ServiceStack.Redis订阅代码中遇到了同样的问题,我们尝试了一些设置,例如retrycount,retrytimeout等等,它们都不起作用,后来我们的解决方法是捕获RedisException并再次进行订阅。