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:
Questo flusso legge un messaggio di richiesta da un'applicazione che è in grado di scrivere il messaggio di prova per questo esempio, converte il payload da XML in CWF e scrive un messaggio di output che contiene un payload formato CWF. Questo messaggio viene letto ed elaborato da un flusso di messaggi Risposta di backend, che simula una applicazione stabilita.
Simula un'applicazione stabilita che riceve un messaggio WebSphere MQ contenente un payload in formato CWF, esegue qualche elaborazione del contenuto e scrive un messaggio WebSphere MQ di risposta contenente un payload in formato CWF.
Questo flusso legge il messaggio di risposta dal flusso di messaggi Risposta di backend, converte il payload da CWF a XML e scrive un messaggio di output contenente un payload formato XML. Questo messaggio viene letto ed elaborato dall'applicazione di origine.
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.
Il flusso di messaggi di richiesta attua la seguente elaborazione:
Il Flusso di messaggi di richiesta è composto dai seguenti nodi:
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:
Il nodo MQOutput denominato OutputRequestMsg scrive il messaggio di output WebSphere MQ.
Il flusso di messaggi risposta di backend attua la seguente elaborazione:
Il Flusso di messaggi risposta di backend è composto dai seguenti nodi:
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:
Il nodo MQOutput denominato PutReplyMsg scrive il messaggio di output WebSphere MQ.
Il flusso di messaggi di risposta attua la seguente elaborazione:
Il Flusso di messaggi di risposta è composto dai seguenti nodi:
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:
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.
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>