Fondamenti di IBM WebSphere MQ Server
3 March, 2008 – 16:06COS’E` MQ E A COSA SERVE
E` un prodotto che rende possibile la comunicazione tra client con diverse specifiche hardware e software.
I client comunicano tra di loro spedendo dei dati in messaggi, i quali vengono accodati nello storage.
Grazie ai prodotti MQSeries, tutte le applicazioni utilizzano lo stesso tipo di messaggi; i protocolli per comunicazioni vengono nascosti dalle applicazioni.
I MESSAGGI (MESSAGE)
I messaggi MQSeries sono composti da 2 parti:
- Descrizione del Messaggio, identifica il messaggio e contiene altre informazioni di controllo o attributi, come ad esempio la data e l’ora di creazione del messaggio, il tipo di messaggio e la priorità assegnata al messaggio dall’applicazione che lo invia;
- Dati dell’Applicazione, sono definiti dai programmi applicativi che li utilizzano.
Ci sono 2 attributi importanti definiti nella descrizione del messaggio: la durata e la priorita`.
Ad ogni messaggio di MQSeries viene assegnata una priorita` dall’applicazione di invio, che e` un numero compreso tra 0 e 9 e puo` influire sull’ordine in cui un messaggio viene richiamato da una coda e sul modo in cui sono creati gli eventi trigger.
Il “Triggering” e` una funzione che consente ad un’applicazione di essere avviata automaticamente quando vengono soddisfatte delle condizioni predefinite su una coda. Queste condizioni includono la ricezione di un qualsiasi messaggio o dei messaggi grazie ad una particolare priorita` o al numero dei messaggi su una coda e così via.
LE CODE (QUEUE)
Una coda è un tipo di elenco utilizzato per memorizzare i messaggi fino a quando non vengono richiamati da un’applicazione. Le code esistono indipendentemente dalle applicazioni dalle quali sono utilizzate e possono trovarsi sia su un sistema locale (code locali), che su un altro gestore code, (code remote).
Una coda puo` esistere:
- in RAM se e` temporanea;
- su disco se deve essere conservata nel caso in cui occorra eseguire delle funzioni di recupero;
- su entrambi se è attualmente in uso e deve essere anche conservata per il recupero.
In MQSeries, i messaggi possono essere richiamati da una coda dalle applicazioni autorizzate secondo i seguenti algoritmi:
- First-in-first-out (FIFO);
- priorità dei messaggi, come definita nella descrizione del messaggio, i messaggi che hanno la stessa priorità sono richiamati secondo l’algoritmo FIFO;
- richiesta del programma per un messaggio specifico.
IL GESTORE CODE (QUEUE MANAGER)
Ogni coda appartiene ad un gestore code, che è responsabile della relativa amministrazione ed inserisce i messaggi ricevuti nella coda appropriata, ovvero fornisce servizi di messaggistica ed accodamento ai programmi tramite le chiamate di programma MQI.
(N.B.) Un oggetto MQSeries è una risorsa recuperabile gestita da MQSeries.
MQ mette a disposizione una interfaccia API comune denominata MQI (Message Queue Interface), utilizzabile su qualunque piattaforma su cui sono in esecuzione le applicazioni. Le chiamate effettuate dalle applicazioni e i messaggi scambiati sono in comune.
Le chiamate MQI sono:
- MQBEGIN: il gestore di code coordina un’unita` di lavoro;
- MQCONN: collega ad un gestore code;
- MQCONNX: come sopra specificando pero` altre opzioni;
- MQDISK: disconnessione da un gestore code;
- MQOPEN: apre un oggetto;
- MQCLOSE: chiude un oggetto;
- MQPUT: inserisce un messaggio (coda gia` aperta);
- MQPUT1: inserisce un messaggio;
- MQGET: riceve un messaggio;
- MQCMI: convalida le modifiche;
- MQBACK: annulla le modifiche;
- MQINQ: informazioni sugli attributi dell’oggetto;
- MQSET: imposta gli attributi dell’oggetto.
Le applicazioni emettono le chiamate MQI che vengono implementate dal gestore code, il quale indirizza i messaggi in entrata nelle rispettive code di destinazione; i messagi in uscita vengono inviati dal gestore code al gestore code di destinazione. Il gestore code di destinazione inserisce il messaggio nella coda corretta.
Una coda e` una coda locale se viene gestita dallo stesso gestore code collegato all’applicazione.
Se la coda viene gestita da un gestore code differente, viene chiamata coda remota.
Gli attributi invece indicano:
- se le applicazioni possono richiamare i messaggi dalla coda (ricezione abilitata);
- se le applicazioni possono inserire i messaggi nella coda (inserimento abilitato);
- se l’accesso alla coda e` esclusivo per un’applicazione o condiviso tra le applicazioni;
- la dimensione massima dei messaggi di una coda (dimensione massima dei messaggi);
- il numero massimo di messaggi che possono essere memorizzati contemporaneamente nella coda nello stesso momento (profondità massima della coda).
I CANALI (CHANNEL)
Un canale fornisce un percorso di comunicazione. Esistono due tipi di canali:
- canali di messaggi, servono per la comunicazione tra due gestori di code locali o remoti e sono monodirezionali;
- canali MQI, servono per la comunicazione tra un client MQSeries e un gestore di code, per il trasferimento di chiamate e risposte MQI ed e` bidirezionale.
Per permettere la comunicazione in entrambi le direzioni utilizzando i canali di messaggi bisogna ovviamente crearne due, uno per trasmettere e uno per ricevere.
Per far comunicare due Gestori Code non adiacenti, ovvero che hanno bisogno di un altro gestore code per comunicare, si usa il trasferimento per fasi. Cioe` bisogna indicare al gestore code usato da tramite quali messaggi sono per lui e quali sono da inoltrare ad un’altro gestore code. Si chiama Agente del Canale dei Messaggi il programma che controlla le comunicazione del Gestore Code.
Ulteriori Fonti: http://en.wikipedia.org/wiki/Websphere_MQ, http://publib.boulder.ibm.com/infocenter/wmqv6/v6r0/index.jsp?topic=/com.ibm.mq.branding.doc/help_home_wmq.htm