6

我们正在使用 Service Stack 的 RedisClient 的 BlockingDequeue 来持久化一些数据,直到可以处理为止。调用代码看起来像

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

如果重新启动托管 Redis 的服务器,则 BlockingDequeue 的连接将变为僵尸,并且在客户端应用程序重新启动之前永远不会返回。

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

这种类型的容错是否内置在服务堆栈中而我们缺少它?

还是我们的实现应该处理的事情?如果是这样,有什么推荐的方法吗?

4

1 回答 1

2

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

于 2015-05-15T04:43:10.790 回答