redis - Redis 服务器重启后服务堆栈 Redis 重新连接

标签 redis servicestack fault-tolerance

我们正在使用 Service Stack 的 RedisClient 的 BlockingDequeue 来保存一些数据,直到它可以被处理。调用代码看起来像

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

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

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

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

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

最佳答案

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

关于redis - Redis 服务器重启后服务堆栈 Redis 重新连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20570991/

相关文章:

javascript - 增加 Meteor.observe 的更新频率

javascript - 无法修改javascript回调中的值

servicestack - 最新版本的 ServiceStack 3 中是否存在构建问题?

c# - 是否可以或有必要设置ServiceStack客户端删除请求的内容类型?

php - 容错 file_get_contents

c# - StackExchange.Redis 在 for 循环上进行管道传输?

configuration - redis集群不同的机器

servicestack - 无法获取要触发的自定义响应过滤器属性

multicore - 是否有支持锁步处理器的标准?

scala - 处理 Akka actor 中的错误