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
risposta
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.
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
- 1. qual è il modo migliore per implementare hashCode()?
- 2. Qual è il modo migliore per implementare un link di annullamento dell'iscrizione per la tua newsletter?
- 3. Qual è il modo migliore per implementare i servizi in background per un'applicazione ASP.NET?
- 4. Qual è il modo migliore per implementare restrizioni di input su un controllo TextBox in C#?
- 5. Qual è il modo Pythonic per implementare un semplice FSM?
- 6. Qual è il modo migliore per implementare un campo contatore in MySQL
- 7. In Erlang, qual è il modo migliore per aggiornare un sistema distribuito?
- 8. Il modo migliore per implementare il voto in un'applicazione Rails?
- 9. qual è il modo migliore per implementare l'impaginazione usando la molla MVC con mysql
- 10. Il modo migliore per implementare la riproduzione del gioco?
- 11. Qual è il modo migliore per imparare la WCF?
- 12. .NET - Qual è il modo migliore per implementare un gestore di catch all exception "
- 13. Qual è la procedura migliore per archiviare le stringhe di messaggistica UI in Python/Django?
- 14. Qual è il modo migliore per costruire un NSCompoundPredicate complesso?
- 15. Qual è il modo migliore per implementare i puntatori intelligenti in C++?
- 16. Qual è il modo migliore per implementare un'API REST di registrazione per iPhone/Android?
- 17. Qual è il modo migliore/più pulito per implementare i test A-B in asp.net mvc?
- 18. Qual è il modo migliore per implementare attributi personalizzati in dotnet/.NET?
- 19. Qual è il modo migliore per implementare il cloud storage di Google?
- 20. Qual è il modo migliore per chiudere un ramo Mercurial?
- 21. Qual è il modo migliore per implementare una ricerca di testo completo per un'applicazione ASP.NET MVC?
- 22. Qual è il modo migliore per implementare un'autenticazione basata su token per restify.js?
- 23. Struttura del database per il sistema di messaggistica web
- 24. Qual è il modo migliore per ridimensionare un oggetto BitmapData?
- 25. Il modo migliore per implementare i parametri in JavaScript?
- 26. Qual è il modo migliore per aggiornare l'entità in JPA
- 27. Qual è il modo migliore per convertire String in ByteString
- 28. Qual è il modo migliore per analizzare questo in C++?
- 29. Qual è il modo migliore per scrivere commenti in C?
- 30. Il modo migliore per implementare RKReachabilityObserver in RestKit
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
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. –