Utilice el nodo HTTPAsyncRequest con el nodo HTTPAsyncResponse para crear un par de flujos de mensajes que interactúen con un servicio web de manera asíncrona.
Este tema contiene los apartados siguientes:
El nodo HTTPAsyncRequest envía una solicitud de servicio web, pero el nodo no espera a que se reciba la respuesta de servicio web asociada. La respuesta de servicio web la recibe el nodo HTTPAsyncResponse, que puede estar en un flujo de mensajes independiente pero debe estar en el mismo grupo de ejecución. Los nodos se utilizan como un par y correlacionan las respuestas con las solicitudes originales utilizando un identificador exclusivo. El nodo HTTPAsyncRequest pasa el socket de solicitud al nodo HTTPAsyncResponse para que el servidor de fondo lo utilice para la respuesta. Si la latencia del servidor de fondo es alta, es posible que no responda en el tiempo de espera de socket.
Pasar el socket HTTP al nodo HTTPAsyncResponse permite el flujo de mensajes para recuperar el siguiente mensaje de la cola sin esperar a la respuesta y por lo tanto utiliza hebras y almacenamiento de modo más eficaz que un flujo de mensajes síncrono.
El nodo HTTPAsyncResponse maneja los mensajes en los siguientes dominios de mensaje:
El nodo HTTPAsyncResponse se encuentra en el cajón HTTP de la paleta y está representado en el WebSphere Message Broker Toolkit mediante el siguiente icono:
Utilice el nodo HTTPAsyncResponse como un par con el nodo HTTPAsyncRequest para realizar una solicitud HTTP y recibir una respuesta de manera asíncrona. El nodo HTTPAsyncRequest envía una solicitud al servicio web. El nodo HTTPAsyncResponse recibe la respuesta del servicio web y analiza la respuesta para incluirla en el árbol de salida.
Para obtener más información sobre cómo trabajar con HTTP, consulte Proceso de mensajes HTTP.
Si se ha proporcionado la propiedad de entorno local LocalEnvironment.Destination.HTTP.RequestIdentifier al nodo HTTPAsyncRequest emparejado, ésta se pasa al entorno local para el nodo HTTPAsyncResponse.
El nodo interactúa directamente con un servicio externo utilizando TCP/IP; por consiguiente, puede experimentar los tipos de error siguientes:
Si el nodo detecta estos errores, genera una excepción y la propaga al terminal de anomalías.
La respuesta se produce como un mensaje BLOB porque el nodo no puede determinar en qué formato estará la respuesta. Los mensajes con un código de estado de redirección (3xx) también se manejan del mismo modo.
El nodo HTTPAsyncResponse trata los códigos de estado de la serie 100 como una respuesta 'continuar', descarta la respuesta actual y espera otra respuesta del servidor web.
Los códigos de estado de la serie 200 se tratan como satisfactorios. Las propiedades de nodo determinan el formato del mensaje de salida que se genera y la respuesta se direcciona al terminal de salida del nodo.
Los códigos de estado de la serie 300 son para redirección. El nodo HTTPAsyncResponse no soporta la redirección y los códigos de redirección se tratan como un error.
Set OutputRoot.XMLNS.error850 = CAST(InputRoot.XMLNS.error.BLOB as CHAR CCSID 850);
Para obtener información sobre HTTP, consulte Protocolo
de transferencia de hipertexto - HTTP/1.1.
Para
obtener más información sobre los códigos de retorno HTTP, consulte Códigos de respuesta HTTP.Puede especificar un intervalo de tiempo de espera en el nodo HTTPAsyncRequest para que si la duración de la operación de solicitud-respuesta entera es mayor que la duración especificada, la solicitud se propague al terminal de anomalías de uno de los nodos emparejados. El intervalo de tiempo de espera se aplica al intervalo que empieza cuando el nodo HTTPAsyncRequest envía la solicitud y finaliza cuando el nodo HTTPAsyncResponse recibe por completo la respuesta.
Para cada solicitud que el nodo HTTPAsyncRequest procesa, utiliza una conexión para enviar la solicitud y pasa la conexión al nodo HTTPAsyncResponse emparejado. Si se especifica el intervalo de tiempo de espera, el socket se cierra si el intervalo caduca. Este cierre asegura que una solicitud reciba solamente la respuesta correcta y que todos los datos de respuesta para una solicitud que ha excedido el tiempo de espera se descarten.
El proceso de solicitud-respuesta se divide entre el nodo HTTPAsyncRequest y el nodo HTTPAsyncResponse. Si se produce un tiempo de espera durante la fase de solicitud del proceso, se propaga una excepción al terminal de anomalías del nodo HTTPAsyncRequest. De forma similar, si se produce un tiempo de espera durante la fase de respuesta del proceso, se propaga la solicitud al terminal de anomalías del nodo HTTPAsyncResponse.
En la mayoría de los casos el tiempo de espera se produce cuando se espera una respuesta de servidor, en cuyo caso se utiliza el terminal de anomalías del nodo HTTPAsyncResponse. En algunos casos se puede producir un tiempo de espera cuando el nodo de solicitud envía datos al servidor. En este caso, se utiliza el terminal de anomalías del nodo HTTPAsyncRequest.
La cabecera HTTPResponse, que contiene las cabeceras que devuelve el servicio web remoto, es la primera cabecera del mensaje (después de Propiedades) que se propaga desde el nodo. Esta acción se adopta independientemente de las opciones que se seleccionen. Por consiguiente, para la respuesta del nodo HTTPAsyncResponse que se debe poner en una cola de WebSphere MQ, manipule las cabeceras para que MQMD sea la primera cabecera (después de las propiedades (Properties)).
SET OutputRoot = InputRoot;
SET OutputRoot.HTTPResponseHeader = NULL;
SET OutputRoot = InputRoot;
DECLARE HTTPHeaderRef REFERENCE TO OutputRoot.HTTPResponseHeader;
DETACH HTTPHeaderRef;
ATTACH HTTPHeaderRef TO OutputRoot.MQMD AS NEXTSIBLING;
Los terminales del nodo HTTPAsyncResponse están descritos en la siguiente tabla.
Terminal | Descripción |
---|---|
Failure (Anomalía) | El terminal de salida al que se dirige un mensaje si se ha detectado una anomalía durante su proceso en el nodo. |
Out (Salida) | El terminal de salida al que se direcciona el mensaje si representa la finalización satisfactoria de la solicitud de servicio web y si se requiere proceso adicional dentro del flujo de mensajes. |
Error | El terminal de salida al que se direccionan los mensajes que incluyen un código de estado HTTP que no está dentro del rango de 200 a 299, incluidos los códigos de redirección (3xx). El nodo HTTPAsyncResponse no soporta la redirección. |
Catch (de captación) | El terminal de salida al que se direcciona un mensaje si se genera una excepción en sentido descendente y después este nodo la capta. |
Las tablas siguientes describen las propiedades de nodo. La columna con la cabecera O indica si la propiedad es obligatoria (marcada con un asterisco en el panel si tiene que entrar un valor cuando no hay definido ningún valor predeterminado); la columna con la cabecera C indica si la propiedad es configurable (puede cambiar el valor cuando añade el flujo de mensajes al archivo de intermediario para desplegarlo).
Las propiedades de descripción del nodo HTTPAsyncResponse están descritas en la siguiente tabla.
Propiedad | O | C | Valor predeterminado | Descripción |
---|---|---|---|---|
Nombre de nodo | No | No | El tipo de nodo, HTTPAsyncResponse | El nombre del nodo. |
Descripción corta | No | No | Descripción breve del nodo. | |
Descripción larga | No | No | Texto que describe la finalidad del nodo en el flujo de mensajes. |
La propiedad básica del nodo HTTPAsyncResponse se describe en la siguiente tabla.
Propiedad | O | C | Valor predeterminado | Descripción | Propiedad de mandato mqsiapplybaroverride |
---|---|---|---|---|---|
Identificador exclusivo | Sí | No | Especifique el identificador exclusivo que enlaza el par de nodos HTTPAsyncRequest y HTTPAsyncResponse. | asyncRequestCorrelator |
En la tabla siguiente se describen las propiedades de Análisis de mensajes de respuesta del nodo HTTPAsyncResponse.
Propiedad | O | C | Valor predeterminado | Descripción |
---|---|---|---|---|
Dominio de mensajes | No | No | BLOB | Dominio que se utiliza para analizar el mensaje. Si el campo está en blanco, el valor predeterminado es BLOB. |
Modelo de mensaje | No | No | Deseleccionado | Nombre o ubicación del archivo de esquemas de modelos de mensaje en el que se define el mensaje. Esta lista se llena con todos los archivos de esquemas de modelos de mensajes disponibles para el Dominio de mensajes que ha seleccionado. |
Mensaje | No | No | Deseleccionado | Nombre o ubicación de la raíz de mensaje dentro del archivo de esquemas de modelos de mensaje. Esta lista se llena con todos los mensajes disponibles que se han definido en el Modelo de mensaje que ha seleccionado. |
Formato físico | No | No | Deseleccionado | Nombre del formato físico del mensaje. Si está utilizando el analizador MRM o IDOC, seleccione el formato físico del mensaje de entrada de la lista. Esta lista incluye todos los formatos físicos que ha definido para este modelo de mensaje seleccionado. Si establece la propiedad Dominio de mensajes en DataObject, puede establecer esta propiedad en XML o IDoc ALE de SAP. Establezca esta propiedad en IDoc ALE de SAP cuando tenga que analizar una corriente de bits desde un origen externo y generar un árbol de mensajes. |
Las propiedades Opciones de análisis del nodo HTTPAsyncResponse se describen en la siguiente tabla.
Propiedad | O | C | Valor predeterminado | Descripción |
---|---|---|---|---|
Temporización del análisis | No | No | A petición | Esta propiedad controla cuándo se analiza un mensaje de respuesta. Los valores válidos son A petición,
Inmediato y
Completo. El valor predeterminado es
A petición, lo que hace que se retrase el
análisis del mensaje. Para obtener una descripción completa de esta propiedad, consulte Análisis a petición. |
Crear árbol utilizando tipos de datos de esquema XML | No | No | No seleccionado | Esta propiedad controla si el analizador XMLNSC crea elementos de sintaxis en el árbol de mensajes con tipos de datos obtenidos del esquema XML. Esta propiedad sólo se puede seleccionar si se establece la propiedad Validar del separador Validación en Contenido o Contenido y valor. |
Utilizar analizador compacto XMLNSC para dominio XMLNS | No | No | No seleccionado | Esta propiedad controla si el analizador compacto XMLNSC se utiliza para mensajes en el dominio XMLNS. Si establece esta propiedad, los datos del mensaje de respuesta aparecerán bajo XMLNSC en los nodos que estén conectados al terminal de salida cuando la cabecera MQRFH2 de entrada o el Dominio de las propiedades de Análisis de mensajes de respuesta sea XMLNS. |
Retener contenido mixto | No | No | No seleccionado | Esta propiedad controla si el analizador XMLNSC crea elementos en el árbol de mensajes cuando encuentra texto mixto en un mensaje de respuesta. Si selecciona el recuadro, se crean elementos para el texto mixto. Si deselecciona el recuadro, el texto mixto se ignora y no se crea ningún elemento. |
Retener comentarios | No | No | No seleccionado | Esta propiedad controla si el analizador XMLNSC crea elementos en el árbol de mensaje cuando encuentra comentarios en un mensaje de respuesta. Si selecciona el recuadro, se crean elementos para los comentarios. Si deselecciona el recuadro, los comentarios se ignoran y no se crea ningún elemento. |
Retener instrucciones de proceso | No | No | No seleccionado | Esta propiedad controla si el analizador XMLNSC crea elementos en el árbol de mensajes cuando encuentra instrucciones de proceso en un mensaje de respuesta. Si selecciona el recuadro, se crean elementos para las instrucciones de proceso. Si deselecciona el recuadro, las instrucciones de proceso se ignoran y no se crea ningún elemento. |
Elementos opacos | No | No | Espacio en blanco | Esta propiedad se utiliza para especificar una lista de elementos en el mensaje de respuesta que se analizan opacamente por el analizador XMLNSC. El análisis opaco sólo se realiza si la validación no está habilitada (es decir, si la propiedad Validar está establecida en Ninguno); las entradas que se especifiquen en Elementos opacos se omiten si la validación está habilitada. |
Las propiedades de validación del nodo HTTPAsyncResponse se describen en la siguiente tabla.
Para ver una descripción completa de estas propiedades, consulte Propiedades de validación.
Propiedad | O | C | Valor predeterminado | Descripción | Propiedad de mandato mqsiapplybaroverride |
---|---|---|---|---|---|
Validar | No | Sí | Ninguno | Esta propiedad controla si tiene lugar la
validación. Los valores válidos son Ninguno,
Contenido y valor,
Contenido y
Heredar. Si desea ver información más detallada, consulte Validar mensajes y Propiedades de validación. |
validateMaster |
Acción para anomalía | No | No | Excepción | Esta propiedad controla qué sucede si falla la validación. Sólo puede establecer esta propiedad si establece Validar en Contenido o Contenido y valor. Los valores válidos son Rastreo de usuario, Anotaciones de error locales, Excepción y Lista de excepciones. |
Propiedad | O | C | Valor predeterminado | Descripción |
---|---|---|---|---|
Sucesos | No | No | Ninguno | Los sucesos que se han definido para el nodo se visualizan en este separador. De forma predeterminada, no se define ningún suceso de supervisión en ningún nodo en un flujo de mensajes. Utilice Añadir, Editar y
Suprimir para crear, cambiar o suprimir sucesos de supervisión para el nodo; consulte Configuración de orígenes de sucesos de supervisión utilizando propiedades de supervisión para obtener detalles. Puede habilitar e inhabilitar sucesos que se muestran aquí seleccionando o deseleccionando el recuadro Habilitado. |
Puede recuperar información establecida por el nodo HTTPAsyncRequest emparejado desde la propiedad siguiente bajo LocalEnvironment.Destination.HTTP:
Valor | Descripción |
---|---|
UserContext | Puede recuperar los datos de contexto que ha
almacenado el nodo HTTPAsyncRequest desde la
ubicación siguiente en el entorno local:
Los datos se almacenan como BLOB. Para recuperar los datos de contexto, asigne la variable como de tipo BLOB o utilice un CAST.
Por ejemplo:
|