Sto facendo un progetto con 5 pacchetti. I pacchetti possono comunicare tra loro inviando messaggi a MessageQueue centrale nel pacchetto principale e MessageQueue si occupa di tutti i messaggi. (cfr .: link )
Fornita questa immagine:
ipacchettisarebberoiclient(siapublisherchesottoscrittori)eMessageQueuesarebbel'argomento.
OrastoimplementandoMessageQueue(a.k.a.ilTopicnell'immaginesopra)eipacchettipossonogiàiscriversiaMessageseipacchettipossonoanchepubblicareunmessaggio.
Pubblicareunmessaggioèsoloaggiungereilmessaggioaunacoda"dentro" il MessageQueue.
Quindi in un dato momento durante l'esecuzione ci possono essere 0, 1 o più messaggi nel MessageQueue e ora devo assicurarmi che MessageQueue elabori tutti questi messaggi correttamente (e in ordine).
Un modo per farlo potrebbe essere il seguente:
public class MessageQueue {
public MessageQueue(){
//initialising etc.
processMessages();
}
private void processMessages(){
while(/*program is running*/){
if(queue.isNotEmpty()){
/*process first message in queue*/
}
}
}
Tuttavia, credo che questo non sia un ottimo design e talvolta viene definito busy waiting ?
Come potrei approcciarlo in un modo migliore (senza usare alcuno standard API ofcourse)?