Acerca del ejemplo de Consumidor asíncrono

El ejemplo de Consumidor asíncrono muestra cómo se pueden utilizar nodos asíncronos para llamar a un servicio web. El lenguaje WSDL (Web Services Definition Language) del servicio web se importa en las herramientas y se utiliza para configurar el nodo SOAPAsyncRequest para invocar operaciones expuestas por el servicio web. Este ejemplo también muestra cómo se pueden ampliar las interfaces de WebSphere MQ existentes para realizar peticiones de servicio web.

El ejemplo utiliza inicialmente un transporte HTTP, pero puede modificarse para utilizar JMS, consulte Configuración del ejemplo Consumidor asíncrono para que utilice un transporte JMS.

En el ejemplo, el servicio web es un servicio de pedidos simplificado que expone una operación. El servicio web se proporciona como un flujo de mensajes en el ejemplo. El servicio web devuelve siempre una respuesta que indica que la pieza solicitada está disponible; una opción para ampliar el servicio web puede ser utilizar un nodo Database para consultar una base de datos de existencias.

El ejemplo de Consumidor asíncrono muestra las siguientes tareas:

Los flujos de mensajes

El siguiente diagrama muestra el flujo de mensajes de cliente web:

Una captura de pantalla del flujo de mensajes de cliente web

Tipo de nodo Nombre de nodo
MQInput MQWSInput
MQOutput MQWSOutput
Compute Compute Request, Format Response
SOAPAsyncRequest SOAP Asynchronous Request
SOAPAsyncResponse SOAP Asynchronous Response

Se construye una petición de servicio web a partir de un mensaje WebSphere MQ utilizando el nodo Compute Request en el dominio SOAP. La operación de servicio web se invoca utilizando el nodo SOAP Asynchronous Request y el nodo SOAP Asynchronous Response emparejado recibe la respuesta. Finalmente, el nodo Format Response formatea la respuesta como un mensaje WebSphere MQ.

El diagrama siguiente muestra el flujo de mensajes de servicio web:

Una captura de pantalla del flujo de mensajes de servicio web

Tipo de nodo Nombre de nodo
SOAPInput SOAP Input
RouteToLabel Route WS Operation
Label submitPO
Compute Compute Response
SOAPReply SOAP Reply

Un mensaje SOAP entrante se direcciona al nodo submitPO utilizando el nodo Route WS Operation. En este ejemplo, el servicio web de ejemplo expone sólo una operación. Puede utilizar varios nodos Label para manejar las diferentes operaciones cuando el servicio web exponga más de una operación. La respuesta SOAP se genera en el nodo Compute Response, antes de que la respuesta se devuelva al cliente web.

Los mensajes

El flujo de mensajes de cliente web está controlado por un mensaje WebSphere MQ. Se proporciona un archivo de Cliente de prueba para ejecutar el ejemplo; el archivo utiliza el formato de mensaje mostrado en la captura de pantalla siguiente:

Una captura de pantalla del formato de mensaje OrderMessage.

En el siguiente extracto de esquema editado se muestra el formato válido para un mensaje de petición de servicio web y el mensaje de respuesta:

<xsd:element name="submitPORequest">
...
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="partNo" type="xsd:string"/>
            <xsd:element name="partQuantity" type="xsd:int"/>
            <xsd:element name="personName">
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:element name="firstName" type="xsd:string"/>
                  <xsd:element name="lastName" type="xsd:string"/>
                </xsd:sequence>
              </xsd:complexType>
            </xsd:element>
            <xsd:element name="address">
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:element name="street" type="xsd:string"/>
                  <xsd:element name="city" type="xsd:string"/>
                  <xsd:element name="zipCode" type="xsd:string"/>
                </xsd:sequence>
              </xsd:complexType>
            </xsd:element>
          </xsd:sequence>
        </xsd:complexType>
</xsd:element>
<xsd:element name="submitPOResponse">
...
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="orderStatus" type="xsd:string"/>
            <xsd:element name="orderAmt" type="xsd:int"/>
            <xsd:element name="partNo" type="xsd:string"/>
            <xsd:element name="partQuantity" type="xsd:int"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

Después de ejecutar el ejemplo, tal vez desee ampliarlo para enviar un mensaje de petición que no sea válido. Para enviar un mensaje de petición que no es válido, debe editar el nodo Compute Request para añadir elementos incorrectos en el cuerpo del mensaje SOAP. El terminal de anomalías del nodo SOAPAsyncRequest debe estar conectado porque el servicio web genera un mensaje de error SOAP. Para obtener más detalles sobre los errores SOAP, consulte El error SOAP en la documentación de WebSphere Message Broker.

Volver a la página inicial del ejemplo