我们正在使用 Service Stack 的 RedisClient 的 BlockingDequeue 来持久化一些数据,直到可以处理为止。调用代码看起来像
using (var client = ClientPool.GetClient())
return client.As<TMessage>().Lists[_channel].BlockingDequeue(timeout);
如果重新启动托管 Redis 的服务器,则 BlockingDequeue 的连接将变为僵尸,并且在客户端应用程序重新启动之前永远不会返回。
我们尝试在 BlockingDequeue 和 PooledConnectionManager 上设置超时,但都没有帮助,我猜是因为超时是在服务器端强制执行的。
这种类型的容错是否内置在服务堆栈中而我们缺少它?
还是我们的实现应该处理的事情?如果是这样,有什么推荐的方法吗?