2009-07-16 11 views
8

Per il middleware orientato ai messaggi che non supporta costantemente messaggi prioritari (come AMQP) qual è il modo migliore per implementare il consumo prioritario quando le code hanno solo semantica FIFO ? Il caso d'uso generale sarebbe un sistema in cui i consumatori ricevono messaggi con priorità più elevata prima dei messaggi con priorità più bassa quando un grande backlog di messaggi esiste in coda.In un sistema Qeueing FIFO, qual è il modo migliore per implementare la messaggistica prioritaria

+2

Puoi avere più code? In tal caso, suggerirei di avere una coda separata per i messaggi ad alta priorità che vengono interrogati prima della coda standard, che viene utilizzata solo se la coda di priorità è vuota. Non so se questo si adatta al tuo scenario ma questa è stata la mia prima idea. – CodeFusionMobile

+0

Sono d'accordo con CSharpWithJava. Al momento sto facendo una grande app di messaggistica e, dalle tue domande, ho bisogno di più code, in modo da poter scaricare i messaggi meno precisi su una coda pri inferiore e leggere immediatamente i valori più alti. –

risposta

10

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ù complessa.

Più code possono essere gestite in un paio di modi. Il produttore e il consumatore potrebbero concordare di avere due code tra di loro, una per priorità alta e una 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. Quindi producer-> Router è una singola coda e il router ha quindi due code per il consumatore.

Un altro modo di affrontare il problema, che rischia meno che ideale, sarebbe quello di avere girare consumatore un filo in avanti la coda, quindi la spedizione internamente il lavoro. Qualcosa come la versione del router sopra, ma all'interno di una singola app. Questo ha il rovescio della medaglia di avere più messaggi in volo all'interno della tua app, che possono complicare il recupero in caso di errore.

Non dimenticare di considerare la fame degli eventi effettivamente a bassa priorità, qualunque essi siano, se alcuni di essi devono essere elaborati anche se si verificano ancora eventi con priorità più alta.

+1

Questo è più o meno esattamente chi abbiamo implementato questa strategia per un progetto al lavoro. Più code per un sistema con priorità classificate. Non ci preoccupiamo molto della fame perché possiamo semplicemente ripubblicare importanti messaggi con priorità più bassa con una priorità più alta in tali casi; il lavoro ridondante è gestito, per la maggior parte, idematicamente per consentire questo. – quaternion

Problemi correlati