Attualmente sto lavorando a un progetto in cui è necessario interfacciarsi con un sistema IBM che comunica con il mondo esterno tramite WebSphere MQ. Ho bisogno di interrogare il sistema in modo "richiesta-risposta" usando le code, e lo farò attraverso un gestore code.Scenario di richiesta/risposta di IBM WebSphere MQ
Tuttavia, non riesco a capire come funziona in termini pratici.
Dire che ho più istanze della stessa applicazione che inserisce un messaggio in una coda di richieste. Il messaggio riceve CorrelationId
e MessageId
all'uscita dall'applicazione e una proprietà ReplyToQueue
viene impostata su ciascun messaggio per assicurarsi che il gestore code sappia su quale coda inserire la risposta.
Tuttavia, in che modo il gestore code gestisce la coda di risposta? Non vi è alcuna garanzia in merito alla tempistica delle risposte, quindi come è possibile che la risposta corretta ritorni all'istanza dell'applicazione che ha emesso la richiesta corrispondente?
Continuo a pensare a code di messaggi come una coda FIFO in cui i messaggi devono essere selezionati uno per uno. Tuttavia, ciò significherebbe che l'istanza A potrebbe scegliere una risposta intesa per esempio B. Ovviamente, questo non può essere il modo in cui funziona.
Poi, quando guardo l'API (com.ibm.mq.MQQueue
) vedo che per prendere un messaggio che ho avuto la possibilità di fornire la CorrelationId
e MessageId
del messaggio di richiesta. Ciò significa che quando interrogo il gestore code per un messaggio (con questo set di ID), il gestore code esegue l'iterazione attraverso i messaggi nella coda e restituisce il messaggio corrispondente? Questo, d'altro canto, significherebbe che non stiamo parlando di una coda FIFO?
Per aggiungere alle altre risposte, WMQ mantiene un indice dei campi 'MsgID' e' CorrelID' in modo che qualsiasi 'GET' su questi campi non richieda di scorrere tutti i messaggi per trovare quello giusto. Per ulteriori informazioni sullo sviluppo di app di accodamento, consultare [* Progettazione di applicazioni WebSphere MQ *] (http://iopt.us/1pT4PdO) nell'Infocenter WMQ. –