2013-12-13 17 views
5

Usiamo BlockingDequeue di RedisClient di Service Stack per mantenere alcuni dati finché non possono essere elaborati. Il codice chiamante appare comeIl servizio Stack Redis ricollega dopo il riavvio del server Redis

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

Se il server che ospita Redis viene riavviato, i collegamenti per l'BlockingDequeue vanno zombie e non tornare fino al riavvio dell'applicazione client.

Abbiamo provato a impostare il timeout su BlockingDequeue e su PooledConnectionManager, ma nessuno dei due ha aiutato, immagino perché il timeout è applicato sul lato server.

Questo tipo di tolleranza agli errori è incorporato nello stack di servizio e non è presente?

O è qualcosa che la nostra implementazione dovrebbe gestire? Se è così ci sono approcci raccomandati?

risposta

1

Abbiamo riscontrato lo stesso problema nel nostro codice di abbonamento ServiceStack.Redis, abbiamo provato alcune impostazioni, come retrycount, retrytimeout, ecc.