Informazioni sull'esempio Richiesta/Risposta coordinate

L'esempio Richiesta/Risposta coordinate è un'applicazione di esempio di flusso di messaggi basata sullo scenario di un'applicazione contemporanea e di un'applicazione stabilita che comunicano tramite l'utilizzo di messaggi WebSphere MQ in un modello di elaborazione richiesta/risposta.  L'applicazione contemporanea utilizza messaggi XML a definizione automatica ed emette un messaggio di richiesta.  L'applicazione stabilita utilizza messaggi CWF (Custom Wire Format).  Riceve un messaggio di richiesta, lo elabora ed invia un messaggio di risposta.  Perché le applicazioni comunichino con esito positivo, i formati dei messaggi devono essere convertiti sia per i messaggi di richiesta che di risposta.

L'esempio dimostra come si può realizzare la conversione tra messaggi XML a definizione automatica e messaggi CWF.  Inoltre l'esempio dimostra come è possibile memorizzare informazioni in un flusso di messaggi e richiamarlo in un altro.  Nell'esempio si presenta la necessità di preservare ReplyToQ e ReplyToQMgr provenienti dal messaggio di richiesta iniziale per l'uso quando viene ricevuto il messaggio di risposta corrispondente.  Nello scenario viene utilizzato un messaggio WebSphere MQ per memorizzare i dettagli.

L'elaborazione nell'esempio consiste di tre flussi di messaggi ed una serie di messaggi.  I flussi di messaggi sono:

La serie di messaggi Sample MSET con definizione messaggio SaleListMessage viene utilizzata nella conversione del messaggio dal formato XML in CWF nella sezione relativa alla richiesta dell'elaborazione e nella conversione da CWF in XML nella sezione relativa alla risposta della elaborazione.

I dettagli dei flussi di messaggi e l'elaborazione da essi eseguita sono descritti nella sezione sottostante.

Flusso di messaggi di richiesta

Il flusso di messaggi di richiesta attua la seguente elaborazione:

Il Flusso di messaggi di richiesta è composto dai seguenti nodi:

Il Flusso di messaggi di richiesta

Il nodo MQInput denominato GetRequestMsg legge il messaggio XML. Poiché il messaggio in entrata è in formato XML a definizione automatica, non è necessario specificare una serie di messaggi o un formato per poter analizzare correttamente questo messaggio.

Il flusso secondario StoreOriginalMQMD_Sub incorpora la memoria dei valori ReplyToQ e ReplyToQMgr in un messaggio WebSphere MQ.  Questa operazione viene eseguita per due motivi:  In primo luogo per consentire un facile riutilizzo della logica dell'elaborazione in altri flussi di messaggi e secondo per consentire la sostituzione con implementazioni alternative.  Ad esempio potrebbe essere creata un'implementazione alternativa che utilizzi un nodo database.

Il nodo Compute denominato TransformAndSetReplyTo esegue queste azioni:

  1. Copia le intestazioni del messaggio dal messaggio di input all'albero del messaggio di output.
  2. Esegue la conversione del messaggio di input dal formato XML in CWF. 
  3. Imposta la serie di messaggi, il tipo ed il formato per il messaggio di output.
  4. Imposta ReplyToQ per il nuovo messaggio in modo che sia quello della coda di input per il flusso di messaggi di risposta.

Il nodo MQOutput denominato OutputRequestMsg scrive il messaggio di output WebSphere MQ.

Flusso di messaggi risposta di backend

Il flusso di messaggi risposta di backend attua la seguente elaborazione:

  1. Legge un messaggio WebSphere MQ.
  2. Aggiunge l'ora in cui è stato modificato il messaggio al payload del messaggio stesso.
  3. Scrive un messaggio WebSphere MQ.

Il Flusso di messaggi risposta di backend è composto dai seguenti nodi:

Il Flusso di messaggi risposta di backend

Il nodo MQInput denominato GetRequestMsg legge il messaggio CWF. La serie di messaggi, il formato ed il dominio necessari per analizzare il messaggio in entrata vengono specificati nel nodo MQInput.

Il nodo Compute denominato Backend_Computation esegue queste azioni:

  1. Copia l'intero messaggio di input nell'albero del messaggio di output.
  2. Ottiene l'ora corrente dal Message Broker e la riformatta.
  3. Aggiunge l'ora riformattata all'albero del messaggio di output.

Il nodo MQOutput denominato PutReplyMsg scrive il messaggio di output WebSphere MQ.

Flusso di messaggi di risposta

Il flusso di messaggi di risposta attua la seguente elaborazione:

  1. Legge un messaggio WebSphere MQ contenente un messaggio in formato CWF.
  2. Converte il messaggio nel formato XML equivalente.
  3. Ottiene il ReplyToQ e ReplyToQMgr del messaggio di richiesta originale leggendo il messaggio WebSphere MQ che è stato utilizzato per memorizzare queste informazioni nel Flusso di messaggi di richiesta. Questa operazione viene effettuata utilizzando il nodo MQGet.
  4. Crea un messaggio WebSphere MQ contenente il messaggio convertito ed i valori ReplyToQ e ReplyToQMgr richiamati.

Il Flusso di messaggi di risposta è composto dai seguenti nodi:

Il Flusso di messaggi risposta

Il nodo MQInput denominato GetBackendReply legge il messaggio CWF. La serie di messaggi, il formato ed il dominio necessari per analizzare il messaggio in entrata vengono specificati nel nodo MQInput.

Il nodo Compute denominato MapToRequestor esegue queste azioni:

  1. Copia le intestazioni del messaggio dal messaggio di input all'albero del messaggio di output.
  2. Esegue la conversione del messaggio di input dal formato CWF in XML.

Il flusso secondario RestoreOriginalMQMD_Sub incorpora il richiamo dei valori ReplyToQ e ReplyToQMgr. Legge il messaggio WebSphere MQ contenente i valori ReplyToQ e ReplyToQMgr che erano stati specificati nel messaggio di richiesta originale e copia tali valori nel messaggio di risposta.  Effettua la lettura utilizzando il nodo MQGet.  Il nodo MQGet è configurato per selezionare il messaggio corrispondente tramite CorrelId e per copiare l'MQMD della richiesta originale nell'MQMD del messaggio che si sta elaborando.  Questa operazione si esegue per dirigere il messaggio di risposta dall'applicazione stabilita all'applicazione richiedente corretta. Il nodo MQGet richiama anche il payload del messaggio WebSphere MQ utilizzato per memorizzare i valori originali ReplyToQ e ReplyToQMgr.

Il nodo MQOutput denominato PutOriginalReply scrive il messaggio di output WebSphere MQ.

Messaggio di prova

Il messaggio di prova utilizzato nell'esempio richiesta/risposta coordinate è un semplice messaggio XML che contiene dettagli della fattura relativa ad un cliente.  Durante l'esecuzione dell'esempio, questo messaggio XML viene convertito in formato CWF.  Il valore del campo CompletionTime è il solo valore da modificare durante l'esecuzione dell'esempio.  Il messaggio viene riportato sotto.

<SaleEnvelope>
<Header>
<SaleListCount>1</SaleListCount>
</Header>
<SaleList>
<Invoice>
<Initial>K</Initial>
<Initial>A</Initial>
<Surname>Braithwaite</Surname>
<Item>
<Code>00</Code>
<Code>01</Code>
<Code>02</Code>
<Description>Twister</Description>
<Category>Giochi</Category>
<Price>00,30</Price>
<Quantity>01</Quantity>
</Item>
<Item>
<Code>02</Code>
<Code>03</Code>
<Code>01</Code>
<Description>Il quotidiano The Times</Description>
<Category>Libri e Media</Category>
<Price>00,20</Price>
<Quantity>01</Quantity>
</Item>
<Balance>00,50</Balance>
<Currency>Sterlina</Currency>
</Invoice>
<Invoice>
<Initial>T</Initial>
<Initial>J</Initial>
<Surname>Dunnwin</Surname>
<Item>
<Code>04</Code>
<Code>05</Code>
<Code>01</Code>
<Description>L'origine delle specie</Description>
<Category>Libri e Media</Category>
<Price>22,34</Price>
<Quantity>02</Quantity>
</Item>
<Item>
<Code>06</Code>
<Code>07</Code>
<Code>01</Code>
<Description>Microscopio</Description>
<Category>Varie</Category>
<Price>36,20</Price>
<Quantity>01</Quantity>
</Item>
<Balance>81,84</Balance>
<Currency>Euro</Currency>
</Invoice>
</SaleList>
<Trailer>
<CompletionTime>12.00.00</CompletionTime>
</Trailer>
</SaleEnvelope>

icona Pagina principale   Torna alla pagina home dell'esempio