Мы используем BlockingDequeue RedisClient сервисного стека для сохранения некоторых данных до тех пор, пока они не будут обработаны. Код вызова выглядит так
using (var client = ClientPool.GetClient())
return client.As<TMessage>().Lists[_channel].BlockingDequeue(timeout);
Если сервер, на котором размещается Redis, перезапускается, соединения для BlockingDequeue становятся зомби и никогда не возвращаются, пока клиентское приложение не будет перезапущено.
Мы пытались установить тайм-аут для BlockingDequeue, а также для PooledConnectionManager, но ни один из них не помог, я предполагаю, потому что тайм-аут применяется на стороне сервера.
Является ли этот тип отказоустойчивости встроенным в сервисный стек, и нам его не хватает?
Или это то, с чем должна справиться наша реализация? Если да, то есть ли рекомендуемые подходы?