Ho recentemente iniziato a ospitare un mio progetto parallelo sulle nuove macchine virtuali di Azure. L'app utilizza Redis come cache in memoria. Tutto stava funzionando bene nel mio ambiente locale ma ora che ho spostato il codice in Azure vedo alcune strane eccezioni che escono da Booksleeve.Errori di connessione redis quando si utilizza il client Booksleeve Redis in Azure VM
Quando l'app si accende per la prima volta, tutto funziona correttamente. Tuttavia, dopo circa 5-10 minuti di inattività, la prossima richiesta all'app presenta un'eccezione di rete (sono al lavoro in questo momento e non ho i messaggi di errore esatti su di me, quindi li posterò quando torno a casa se la gente pensa di essere pertinente alla discussione) Questo fa sì che il MessageQueue interno si chiuda, il che si traduce in ogni successivo Enqueue() che genera un'eccezione ("La coda è chiusa").
Quindi dopo un po 'di ricerca su google ho trovato questo post SO: Maintaining an open Redis connection using BookSleeve su un gestore di connessione DIY. Posso certamente implementare qualcosa di simile se quella è la migliore linea d'azione.
Quindi, domande:
- è normale per il RedisConnection per chiudere periodicamente dopo un certo periodo di tempo?
- Ho visto il metodo
conn.SetKeepAlive()
ma ho provato molti valori diversi e nessuno sembra fare la differenza. C'è dell'altro o sto abbaiando dall'albero sbagliato? - L'idea del gestore connessioni dal post è il modo migliore per gestire questo scenario?
- Qualcuno può far luce su perché ospitare l'istanza di Redis in una nuova VM di Azure causa questo problema? Posso anche confermare che se eseguo il mio ambiente locale contro la VM di Azure Redis, ho riscontrato questo problema.
Come ho già detto, se è insolito che una connessione Redis muoia dopo l'inattività, invierò le tracce dello stack e le eccezioni dai miei registri quando torno a casa.
Grazie!
UPDATE Didier ha sottolineato nei commenti che questo può essere correlato al balanacer carico che Azure utilizza: http://blogs.msdn.com/b/avkashchauhan/archive/2011/11/12/windows-azure-load-balancer-timeout-details.aspx
Partendo dal presupposto che è il caso, quale sarebbe il modo migliore per attuare una gestione connessione che potrebbe conto di questo problema sciocco. Presumo che non dovrei creare una connessione per unità di lavoro, giusto?
Cosa si ha nel parametro di timeout del file di configurazione Redis? Questo è il timeout di inattività (impostarlo su 0 per evitare che Redis chiuda le connessioni inattive). –
Il timeout è impostato su 0 già. Appena ricontrollato pure. :( – Eric
Sembra essere una "funzione" di AzureVM ... Vedi http://blogs.msdn.com/b/avkashchauhan/archive/2011/11/12/windows-azure-load-balancer-timeout-details .aspx –