Domanda

Ho un sistema che genera i messaggi sporadicamente, e mi piacerebbe presentare un solo zero o un messaggio ogni 5 minuti. Se non viene generato alcun messaggio, non verrà elaborato dal consumatore coda. Se un centinaio di messaggi identici vengono generati in 5 minuti Voglio solo uno di questi per essere consumato dalla coda.

Sto usando AMQP (RabbitMQ), c'è un modo per raggiungere questo obiettivo entro RabbitMQ o il protocollo AMQP? Posso ispezionare il contenuto di una coda per assicurarsi che io non inserisco un duplicato? Sembra che l'ispezione coda è una cattiva idea e non in genere quello che dovrebbe essere fatto per un sistema di messaggistica.

Senza ispezione coda, questo può essere realizzato con questi strumenti? L'unica soluzione che viene in mente è di avere una seconda coda che prende tutti i messaggi, quindi il consumatore legge ogni messaggio e lo mette in una coda interna, attende per 5 minuti, e gli eventuali messaggi duplicati che vengono ricevuti vengono scartati. Dopo il ritardo, il singolo messaggio viene inserito nella coda di "reale" da elaborare.

Sembra che questo potrebbe essere una situazione comune, che un sistema di coda in grado di gestire. Tutte le idee?

È stato utile?

Soluzione

Stato di gestione dei messaggi non è qualcosa che AMQP sta affrontando. Si potrebbe provare a gestire lo stato in qualche processo che è presente nei messaggi AMQ e proxy anche (come hai scritto nella tua domanda iniziale). A seconda della situazione il tuo forse potrebbe utilizzare sequenze o mezzi più sofisticati di rilevamento dei duplicati senza stato, ma AMQP non gestisce questo caso specifico utilizzo.

L'unica cosa che è garantito è che se più associazioni corrispondono a un messaggio che viene successivamente consegnato a una coda di un solo messaggio viene effettivamente consegnato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top