2013-12-13 24 views
5

İşleme alınana kadar bazı verileri devam ettirmek için Service Stack'ın RedisClient'in BlockingDequeue'sini kullanıyoruz. çağıran koduServis Yığını Redis sunucusu yeniden başlatıldıktan sonra yeniden bağl.

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

gibi REDIS barındıran sunucu yeniden başlatılırsa, BlockingDequeue için bağlantıları zombi gidip asla istemci uygulaması yeniden dek dönmek görünüyor.

Zaman aşımı, PooledConnectionManager'ın yanı sıra BlockingDequeue'da ayarlamayı denedik, ancak yardımcı olmadık, çünkü zaman aşımı sunucu tarafında zorlanıyor.

Hizmet yığınının içine yerleştirilmiş bu tür bir hata toleransı var mı ve eksik mi?

Yoksa bizim uygulamamız gereken bir şey mi? Varsa önerilen yaklaşımlar var mı?

cevap

1

ServiceStack.Redis abonelik kodumuzda aynı sorunla karşılaştık, yeniden deneme, yeniden deneme, vb. Gibi birkaç ayarı denedik, bunların hiçbiri işe yaramıyor, daha sonra çözümümüz RedisException'ı yakalamak ve tekrar abone olmaktır.

İlgili konular