Utilizzo di un nodo MQGet in un flusso di richiesta-risposta

Per ulteriori dettagli sull'elaborazione relativa alle operazioni descritte sopra all'interno del nodo MQGet, fare riferimento a Elaborazione del messaggio del nodo MQGet. Per ulteriori dettagli sulla creazione di questo tipo di flusso, fare riferimento a: esempio Richiesta/Replica coordinate.

Introduzione

Questa pagina costituisce un'introduzione all'utilizzo di un nodo MQGet in un flusso di richiesta-risposta e descrive la procedura di elaborazione dei messaggi di input tramite nodo (secondo i parametri di input e LocalEnvironment impostati) per creare messaggi di output.

Un flusso di richiesta-risposta tra due applicazioni consente la richiesta di messaggi da un'applicazione all'altra. Questo tipo di flusso è descritto nel diagramma seguente:

L'immagine è descritta nel testo riportato di seguito.

Nel diagramma, l'applicazione di richiesta posiziona un messaggio nella coda di input "Richiesta" dell'applicazione di risposta. L'applicazione di risposta elabora quindi il messaggio e invia una risposta alla coda di "risposta" specificata nel messaggio originale dall'applicazione di richiesta.

Se è necessario sostituire o migliorare una di queste applicazioni senza effettuare modifiche all'altra, trasformare i messaggi tra le due applicazioni. Per effettuare tale operazione, è possibile inserire il broker tra le due applicazioni, come riportato nel diagramma seguente:

L'immagine è descritta nel testo riportato di seguito.

Ora un alias di coda o un dispositivo simile è configurato in modo tale che il messaggio di richiesta venga posizionato dall'applicazione di richiesta nella coda di input del flusso di messaggi del broker "Richiesta di risposta coordinata". Nell'esempio riportato sopra il messaggio era posizionato in modo diretto nella coda di input dell'applicazione di risposta. Il flusso "Richiesta di risposta coordinata" trasforma il messaggio in un formato adatto all'applicazione di risposta e lo inoltra alla coda di input. Salva inoltre i dettagli della coda di risposta dell'applicazione di richiesta originale e li ripristina nel messaggio di risposta ricevuto dall'applicazione di risposta per restituirlo in modo corretto all'applicazione di richiesta.

E' possibile posizionare un nodo MQGet in qualsiasi punto in un flusso; il nodo riceve nel terminale di input una struttura di input trasmessa dal nodo precedente. Utilizza quindi il messaggio recuperato dalla coda di WebSphere MQ configurata per creare una struttura risultato. Infine utilizza la struttura di input e la struttura risultato per creare una struttura di output che viene trasmessa successivamente al terminale di output, di avvertenza o di errore a seconda della configurazione del nodo e del risultato dell'operazione Get.

Per ulteriori dettagli sulla creazione del flusso, fare riferimento a: esempio Richiesta/Replica coordinate.

Procedura di utilizzo di LocalEnvironment

LocalEnvironment trasmesso dal nodo precedente viene letto e aggiornato dal nodo MQGet.

  • La struttura MQGMO verrà letta da ${inputMQParmsLocation}.MQGMO.*.
  • Il completamento MQ e i codici di errore verranno posizionati in ${outputMQParmsLocation}.CC e .RC.
  • Se esiste una struttura MQGMO nell'ambiente locale, verrà aggiornato con i valori utilizzati dal nodo e trasmesso.
  • Se esiste ${inputMQParmsLocation}.MQMD, MQMD trasmesso alla chiamata MQGET (in cui sono contenuti i valori specificati nel messaggio di input o creati dal nodo) verrà posizionato in tale ubicazione eliminando gli elementi presenti in precedenza.

${inputMQParmsLocation} è il valore impostato nella proprietà del nodo MQGet Ubicazione dei parametri MQ di input nella scheda delle proprietà della richiesta.

${outputMQParmsLocation} è il valore impostato nella proprietà del nodo MQGet Ubicazione dei parametri MQ di emissione nella scheda delle proprietà del risultato.

Per ulteriori dettagli su queste proprietà, fare riferimento a Nodo MQGet.

Riepilogo:
${inputMQParmsLocation}
  • QueueName: sostituzione facoltativa per la proprietà del nodo MQGet Nome coda.
  • InitialBufferSize: sostituzione facoltativa per la proprietà del nodo MQGet relativa alle dimensioni del buffer iniziale.
  • MQGMO.*: opzioni di richiamo del messaggio di MQ utilizzate dal nodo MQGet.
${outputMQParmsLocation}
  • CC: codice di completamento di richiamo di MQ.
  • RC: codice risultato di richiamo di MQ.
  • MQGMO.*: utilizzo delle opzioni di richiamo del messaggio di MQ se presenti in ${inputMQParmsLocation}.
  • MQMD: descrittore del messaggio MQ per messaggi ricevuti.

Procedura di creazione di MQMD per la chiamata MQGet

  • Se non si fornisce un MQMD di input, viene utilizzato un MQMD predefinito, come descritto nella guida Application Programming Reference di WebSphere MQ .
  • Se si fornisce un MQMD di input, verrà utilizzato secondo una delle modalità seguenti:
    • Se è impostato l'attributo Utilizza MQMD di immissione completo, MQMD di input verrà utilizzato in modo completo.
    • Se l'attributo Utilizza MQMD di immissione completo non è impostato, viene preparato un MQMD predefinito, quindi dal MQMD di input, se le caselle di controllo messageID o correlID sono impostate, gli ID corrispondenti vengono copiati all'interno.

Nel diagramma riportato di seguito viene descritto nei dettagli la procedura di creazione mediante il nodo MQGet del MQMD da utilizzare nella chiamata a WebSphere MQ:

Il diagramma è descritto nel testo riportato sopra.

Procedura di creazione dell'albero dei messaggi di output

Nel seguente diagramma viene descritta la procedura di creazione dell'albero dei messaggi di output combinando la struttura di input dal nodo precedente con la struttura risultato dalla chiamata MQGet:

Il diagramma è descritto nel testo riportato sopra.

Di seguito viene riportato un esempio, dove le proprietà del nodo MQGet sono configurate come elencato:
copyMessage
copyEntireMessage
generateMode
message
outputDataLocation
OutputRoot.XML.A
resultDataLocation
ResultRoot.XML.C
In questo esempio la struttura di output è creata secondo la seguente sequenza:
  1. La struttura di input completa viene copiata nella struttura di output, compresa la diramazione XML con l'elemento child A e il relativo elemento child B.
  2. Dalla struttura risultato, l'elemento child C della diramazione XML e il relativo elemento child D vengono inseriti nella struttura di output nella posizione OutputRoot.XML.A. Il contenuto precedente di A (valori ed elementi child) viene perso e sostituito dal contenuto di C, compresi tutti i valori e gli elementi child, in questo caso l'elemento child D.
  3. La posizione nella struttura di output mantiene la denominazione A.
Nel diagramma riportato di seguito ciò viene illustrato visivamente:

Il diagramma è descritto nel testo riportato sopra.

Strutture di messaggio di esempio

Di seguito vengono riportati alcuni esempi di procedura per la creazione di alberi dei messaggi secondo le regole descritte sopra.

Tabella 1. Input, LocalEnvironment e MQGet di esempio
Con il seguente assemblaggio del messaggio: Il messaggio restituito da MQGet è:
InputRoot
MQMD
{messaggio di input mqmd}
MQRFH2
{messaggio di input mqrfh2}
XMLNS
{contenuto del messaggio di input}
InputLocalEnvironment
MQ
GET
MQGMO
MatchOptions = MQMO_MATCH_CORREL_ID
MQMD (senza elementi child)
MyData
MQMD
{input mqmd} (with CorrelID = {correct Correlation ID as binary})
Inizio modifica
ResultRoot
MQMD
{messaggio risultato mqmd}
MQRFH2
{messaggio risultato mqrfh2}
XML
{contenuto del messaggio risultato}
Fine modifica
Tabella 2. Alberi del messaggio risultato di esempio, secondo le impostazioni dettagliate delle proprietà del nodo MQGet.
Con le seguenti impostazioni: L'assemblaggio del messaggio di output risultato è:
inputMQMDLocation
InputLocalEnvironment.MyData.MQMD
copyMessage
copyEntireMessage
copyLocalEnv
copyEntireLocalEnvironment
generateMode
messageAndLocalEnvironment
outputDataLocation
InputLocalEnvironment.MyData.ReturnedMessage
OutputRoot
MQMD
{messaggio di input mqmd}
MQRFH2
{messaggio di input mqrfh2}
XMLNS
{contenuto del messaggio di input}
OutputLocalEnvironment
MQ
GET
MQGMO
{mqgmo utilizzato per il richiamo}
MQMD
{mqmd utilizzato per il richiamo}
CC = 0
RC = 0
MyData
MQMD
{input mqmd} (with CorrelID = {correct Correlation ID as binary})
ReturnedMessage
MQMD
{messaggio risultato mqmd}
MQRFH2
{messaggio risultato mqrfh2}
XML
{contenuto del messaggio risultato}
resultDataLocation
ResultRoot.XML
OutputRoot
MQMD
{messaggio di input mqmd}
MQRFH2
{messaggio di input mqrfh2}
XMLNS
{contenuto del messaggio di input}
OutputLocalEnvironment
MQ
GET
MQGMO
{mqgmo utilizzato per il richiamo}
MQMD
{mqmd utilizzato per il richiamo}
CC = 0
RC = 0
MyData
MQMD
{input mqmd} (with CorrelID = {correct Correlation ID as binary})
Messaggio restituito (con gli attributi e il valore da ResultRoot.XML)
{contenuto del messaggio risultato}

Questa struttura è il risultato dell'elaborazione di un'assegnazione da ${resultDataLocation} a ${outputDataLocation}. Il valore dell'elemento di origine viene copiato con tutti gli elementi child, compresi gli attributi.

copyLocalEnv
none
OutputRoot
MQMD
{messaggio di input mqmd}
MQRFH2
{messaggio di input mqrfh2}
XMLNS
{contenuto del messaggio di input}
OutputLocalEnvironment
MQ
GET
MQGMO
{mqgmo utilizzato per il richiamo}
MQMD
{mqmd utilizzato per il richiamo}
CC = 0
RC = 0
MyData
Messaggio restituito (con gli attributi e il valore da ResultRoot.XML)
{contenuto del messaggio risultato}

Questa struttura dispone di MQMD utilizzato per il richiamo in OutputLocalEnvironment poiché all'interno dell'ubicazione dei parametri MQ di input era presente un elemento MQMD. Anche se la struttura di input non viene copiata, la presenza dell'elemento MQMD provoca il posizionamento nella struttura di output di MQMD utilizzato per il richiamo.

outputDataLocation
<vuoto>
copyLocalEnv
copyEntireLocalEnvironment
OutputRoot
MQMD
{messaggio risultato mqmd}
MQRFH2
{messaggio risultato mqrfh2}
XMLNS
{contenuto del messaggio risultato}
OutputLocalEnvironment
MQ
GET
MQGMO
{mqgmo utilizzato per il richiamo}
MQMD
{mqmd utilizzato per il richiamo}
CC = 0
RC = 0
MyData
MQMD
{input mqmd} (with CorrelID = {correct Correlation ID as binary})

L'impostazione di copyMessage in questo caso non modifica la struttura di output finale.

Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
ac34680_