Сервисный стек Redis переподключается после перезагрузки сервера Redis

Мы используем BlockingDequeue RedisClient сервисного стека для сохранения некоторых данных до тех пор, пока они не будут обработаны. Код вызова выглядит так

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

Если сервер, на котором размещается Redis, перезапускается, соединения для BlockingDequeue становятся зомби и никогда не возвращаются, пока клиентское приложение не будет перезапущено.

Мы пытались установить тайм-аут для BlockingDequeue, а также для PooledConnectionManager, но ни один из них не помог, я предполагаю, потому что тайм-аут применяется на стороне сервера.

Является ли этот тип отказоустойчивости встроенным в сервисный стек, и нам его не хватает?

Или это то, с чем должна справиться наша реализация? Если да, то есть ли рекомендуемые подходы?


person swestner    schedule 13.12.2013    source источник


Ответы (1)


Мы столкнулись с той же проблемой в нашем коде подписки ServiceStack.Redis, мы попробовали несколько настроек, таких как retrycount, retrytimeout и т. д., ни один из них не работает, позже наш обходной путь — поймать RedisException и снова выполнить подписку.

person Bruce Liu    schedule 15.05.2015