Domanda

Per middleware message-oriented che non sempre supporta i messaggi prioritari (come ad esempio AMQP) qual è il modo migliore per attuare il consumo di priorità quando le code hanno solo semantica FIFO? Il caso generale uso sarebbe un sistema in cui i consumatori ricevono messaggi con priorità superiore prima di messaggi di una priorità inferiore quando un arretrato di messaggi esiste in coda (s).

È stato utile?

Soluzione

Dato solo il supporto FIFO per una data singola coda, si dovranno naturalmente introdurre sia più code, un intermediario, o di avere un consumatore più complesso.

Code multiple possono essere trattati in un paio di modi. Il produttore e il consumatore potrebbe accettare di avere due code tra di loro, uno per alta priorità, ed uno per le attività in background.

Se il produttore è costretto a una singola coda, ma si ha il controllo sopra il consumatore, in considerazione l'introduzione di un router fan-out nel percorso. Così produttore-> Router è una singola coda, e il router ha poi due code per il consumatore.

Un altro modo per affrontare il problema, che rischia meno che ideale, sarebbe quello di avere girare consumatore un filo in avanti la coda, quindi inviare internamente il lavoro. Qualcosa come la versione del router sopra, ma all'interno di una singola applicazione. Questo ha lo svantaggio di avere più messaggi in volo all'interno della vostra applicazione, che può complicare il recupero in caso di guasto.

Non dimenticare di considerare la fame degli eventi efficacemente a bassa priorità, qualsiasi esse siano, se alcuni di loro devono essere trattati, anche se non ci sono eventi ad alta priorità ancora appesi su.

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