Redis
 sql >> Database >  >> NoSQL >> Redis

Redis Pub/Sub con affidabilità

Quando un abbonato (consumatore) muore, la tua lista continuerà a crescere fino al ritorno del cliente. Il tuo produttore potrebbe tagliare l'elenco (da entrambi i lati) una volta raggiunto un limite specifico, ma è qualcosa che dovresti gestire a livello di applicazione. Se includi un timestamp all'interno di ogni messaggio, il tuo consumatore può quindi agire in base all'età di un messaggio, supponendo che tu disponga della logica dell'applicazione che desideri applicare all'età del messaggio.

Non sono sicuro di come un messaggio non valido entrerebbe nel sistema, poiché la connessione a Redis è solitamente TCP con le sue garanzie di integrità. Ma se ciò accade, forse a causa di un bug nella codifica dei messaggi a livello di produttore, potresti fornire un meccanismo generale per la gestione degli errori mantenendo una coda per produttore che ha ricevuto i messaggi di eccezione del consumatore.

I criteri di ripetizione dipenderanno notevolmente dalle esigenze dell'applicazione. Se hai bisogno di una certezza al 100% che un messaggio sia stato ricevuto ed elaborato, dovresti prendere in considerazione l'utilizzo delle transazioni Redis (MULTI/EXEC) per eseguire il wrapping del lavoro svolto da un consumatore, in modo da assicurarti che un client non rimuova un messaggio a meno che ha completato il suo lavoro. Se hai bisogno di un riconoscimento esplicito, puoi usare un messaggio ACK esplicito su una coda dedicata ai processi di produzione.

Senza sapere di più sulle esigenze della tua applicazione, è difficile sapere come scegliere saggiamente. In genere, se i tuoi messaggi richiedono una protezione ACID completa, probabilmente dovrai utilizzare anche le transazioni redis. Se i tuoi messaggi sono significativi solo quando sono tempestivi, le transazioni potrebbero non essere necessarie. Sembra che tu non possa tollerare i messaggi persi, quindi il tuo approccio all'utilizzo di un elenco è buono. Se devi implementare una coda di priorità per i tuoi messaggi, puoi utilizzare l'insieme ordinato (i comandi Z) per archiviare i tuoi messaggi, utilizzando la loro priorità come valore del punteggio, insieme a un consumatore di polling.