首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自BlockingDequeue的RedisResponseException

来自BlockingDequeue的RedisResponseException
EN

Stack Overflow用户
提问于 2013-07-04 00:40:00
回答 2查看 1.6K关注 0票数 2

在RedisTypedClient上使用BlockingDequeue时,我遇到了一个超时异常。

调用代码如下所示

代码语言:javascript
复制
 using (var client = ClientPool.GetClient())
    return client.As<TMessage>().Lists[_channel].BlockingDequeue(timeout);

其中超时设置为0,并且ClientPool是PooledRedisClientManager。

堆栈跟踪如下所示

代码语言:javascript
复制
ServiceStack.Redis.RedisResponseException: No more data, sPort: 51100, LastCommand: 
   at ServiceStack.Redis.RedisNativeClient.CreateResponseError(String error)
   at ServiceStack.Redis.RedisNativeClient.ReadMultiData()
   at ServiceStack.Redis.RedisNativeClient.SendExpectMultiData(Byte[][] cmdWithBinaryArgs)
   at ServiceStack.Redis.RedisNativeClient.BRPop(String listId, Int32 timeOutSecs)
   at ServiceStack.Redis.Generic.RedisTypedClient`1.BlockingDequeueItemFromList(IRedisList`1 fromList, Nullable`1 timeOut)
   at ServiceStack.Redis.Generic.RedisClientList`1.BlockingDequeue(Nullable`1 timeOut)

据我所知,这是一个客户端持有开放连接的问题。我认为这应该是通过使用PooledRedisClientManager来修复的,但它似乎仍然会发生。这个问题很容易重现。只需调用BlockingDequeue方法并等待大约2-3分钟,异常就会抛出。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-09 22:18:19

事实证明,我们是通过一个指向F5大IP流量控制器的dns条目发送Redis请求的,该控制器被设置为在300秒后丢弃空闲连接。一旦我们增加了Big IP上的超时时间,错误就不再发生。

票数 2
EN

Stack Overflow用户

发布于 2014-03-18 20:34:29

我在Windows Azure上有过一次,在redis上我做了config set timeout 30,在ServiceStack.Redis上我做了

代码语言:javascript
复制
            var redisFactory = new PooledRedisClientManager(redisConn);
            redisFactory.ConnectTimeout = 5;
            redisFactory.IdleTimeOutSecs = 30;

现在由于某种原因,它可以工作了

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17453594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档