Para poder ampliar el ejemplo de transferencia de archivos gestionados debe haber completado una de las siguientes tareas:
Tras importar o compilar el ejemplo, puede ampliarlo:
Si surgen problemas al ejecutar el ejemplo, consulte Preparar el entorno para los nodos de Edición de transferencia de archivos de WebSphere MQ o bien Resolución de problemas cuando se ejecutan ejemplos en la documentación de WebSphere Message Broker.
El ejemplo gestiona una sucursal. Para ampliar el ejemplo de forma que trabaje con diversas sucursales en el flujo de mensajes FTEInputBranch2HQMFlow, cambie los filtros del nodo FTEInput. El filtrado permite al nodo FTEInput seleccionar los mensajes que recoge y procesa. Por ejemplo:
Para filtrar por ubicación de directorio, establezca el campo Filtro de directorio de forma que apunte al directorio al que los agentes de punto de venta de sucursal transfieren los mensajes.
Debe también simular un agente para cada sucursal adicional. En el escenario de ejemplo, el cliente .mbtest se utiliza para simular que se envía un mensaje de reabastecimiento de existencias desde el punto de venta de sucursal. Para indicar la sucursal desde la que se ha enviado el mensaje, el campo cabecera de datos de origen de aplicación contiene el número de sucursal. A continuación se utiliza la cabecera para definir el nombre de archivo estableciendo la coincidencia de comodín en el entorno local.
Para permitir que el ejemplo opere con diversas sucursales en el flujo de mensajes FTEOutputHQ2BranchMFlow, cambie las siguientes propiedades del nodo FTEOutput:
En el Entorno local, establezca el Directorio de destino o el Nombre de agente, o ambos, para que direccionen los mensajes al punto de venta de sucursal correcto, consulte Metadatos FTE.
Ahora el ejemplo ya puede procesar archivos de diversas sucursales con agentes locales y remotos.
Si el escenario minorista de ejemplo se amplía para operar con diversas sucursales, generalmente se configuran las instancias de flujo para operar con instancias adicionales para obtener un mejor rendimiento.
Con instancias adicionales, la aplicación de existencias recibe y procesa mensajes de distintas sucursales y mezcla el orden de los datos recibidos. El flujo de mensajes que utiliza el nodo FTEOutput puede abrir y procesar archivos procedentes de diversas sucursales en cualquier momento y empezar a compilar los archivos de forma concurrente.
Con un proceso de diversos flujos no se garantiza que el orden de salida de los datos por parte de la aplicación de existencias sea el mismo orden en que se han recibido. Resulta de crucial importancia que una sucursal en particular reciba el registro de fin de los datos en último lugar, de forma que el archivo se cierre únicamente cuando esté completo. El orden de los datos de producto es en formato XML y se pueden grabar en cualquier orden.
El diagrama siguiente muestra dos formas solventar este problema. En el flujo de arriba, se coloca un nodo Resequence antes del nodo FTEOutput. El nodo Resequence controla el orden en que se propagan en el nodo los mensajes entrantes procedentes de una sucursal, basándose en el número de secuencia que se inserta en cada registro. Para mantener la integridad de los datos de producto de una sucursal, se inserta una etiqueta de grupo de mensajes (como por ejemplo el nombre de sucursal) para asegurarse de que el nodo Resequence agrupa los productos según su sucursal de destino. Sin embargo, el nodo Resequence requiere que los mensajes pertenecientes a una misma sucursal (grupo de secuencia) se manejen en una única hebra. Este escenario es el contrario del requisito original de funcionamiento multiinstancia. Se consigue la secuenciación correcta a costa del funcionamiento de flujo multiinstancia.
Si se rediseña el flujo de mensajes como se muestra en el flujo de más abajo, se soluciona este conflicto. Aquí, el nodo Resequence se coloca después del nodo FTEOutput.
Ahora el flujo ya puede operar en modalidad multihebra, grabando los datos de producto a medida que llegan el terminal de entrada. La salida del nodo FTEOutput la captura un nodo Resequence, que siempre espera a recibir el último registro antes de propagar los registros. El registro de fin de los datos se envía directamente al nodo Resequence, en este punto el nodo propaga el registro únicamente si el nodo ha recibido el conjunto completo de registros para una sucursal. Un nodo Filter descarta los registros de datos y envía únicamente el registro de fin de los datos al nodo FTEOutput. Ahora el nodo FTEOutput ya puede cerrar el archivo y llamar al agente para que transfiera el fichero.
Este diseño permite al nodo FTEOutput operar en flujos con instancias adicionales y mantener la integridad de los datos destinados a un archivo en particular.
El ejemplo básico utiliza el agente FTE intermediario temporal.
Para obtener detalles sobre cómo utilizar los agentes remotos WMQFTE con el agente
de intermediario y sobre cómo utilizar las Herramientas de Message Broker Explorer para crear una
transferencia y comprobar su progreso, consulte
Bienvenido
a WebSphere MQ File Transfer Edition.
Este ejemplo incluye fragmentos de código comentado y descripciones en el código ESQL de Branch2HQDriver. Por ejemplo:
-- Cuando utiliza el nodo FTEInput, éste almacena información a la que puede acceder en los árboles de mensajes -- LocalEnvironment.FTE y LocalEnvironment.FTE.Transfer. El árbol de mensajes LocalEnvironment.FTE almacena información relacionada -- con el registro actual y la cumplimenta el intermediario. El árbol de mensajes LocalEnvironment.FTE.Transfer contiene -- información recibida de WebSphere® MQ File Transfer Edition sobre el archivo --LocalEnvironment.FTE.TimeStamp (CHARACTER) --LocalEnvironment.FTE.Offset (INTEGER) --LocalEnvironment.FTE.Record (INTEGER) --LocalEnvironment.FTE.Delimiter (CHARACTER) --LocalEnvironment.FTE.Transfer.Directory (CHARACTER)
Para obtener información sobre Metadatos FTE, consulte Transferencias de archivos gestionados utilizando WebSphere MQ File Transfer Edition en la documentación de WebSphere Message Broker.
El ejemplo básico muestra el modelo de solicitud/respuesta. El ejemplo utiliza el número de sucursal del mensaje XML y MQMD para garantizar la correlación de solicitud/respuesta. Esta sección se centra en el uso del identificador de transferencia y el nombre del trabajo para la correlación de solicitud/respuesta.
Cuando un agente FTE transfiere un mensaje, el agente cumplimenta el Entorno local con información sobre la transferencia. Esta información se puede sobrescribir, consulte Metadatos FTE o la información se puede utilizar tal cual para correlacionar los mensajes y asegurarse de que se envían todos de vuelta al agente FTE correcto. Puede ver esta información en las propiedades de la transferencia desde la vista de WebSphere Message Broker Explorer Tooling, por ejemplo:
# STARTING <?xml version="1.0" encoding="UTF-8"?> <transaction xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ID="414d51204d4237514d47522020202020bb73ea4b20046302" agentRole="sourceAgent" version="3.00" xsi:noNamespaceSchemaLocation="TransferLog.xsd"> <action time="2010-05-12T11:34:12.421Z">started</action> <sourceAgent QMgr="MB8QMGR" agent="MB8BROKER.FTEBRANCH123"> <systemInfo architecture="x86" name="Windows XP" version="5.1 build 2600 Service Pack 3"/> </sourceAgent> <destinationAgent QMgr="MB8QMGR" agent="MB8BROKER.FTEHQ"/> <originator> <hostName>IBM-27BDFF76CFB</hostName> <userID>SYSTEM</userID> <mqmdUserID>SYSTEM</mqmdUserID> </originator> <transferSet bytesSent="0" startTime="2010-05-12T11:34:12.421Z" total="1"> <metaDataSet> <metaData key="com.ibm.wmqfte.TransferId">414d51204d4237514d47522020202020bb73ea4b20046302</metaData> <metaData key="com.ibm.wmqfte.MqmdUser">SYSTEM</metaData> <metaData key="com.ibm.wmqfte.DestinationAgent">MB8BROKER.FTEHQ</metaData> <metaData key="com.ibm.wmqfte.OriginatingHost">IBM-27BDFF76CFB</metaData> <metaData key="com.ibm.wmqfte.OriginatingUser">SYSTEM</metaData> <metaData key="com.ibm.wmqfte.JobName">Branch123</metaData> <metaData key="com.ibm.wmqfte.SourceAgent">MB8BROKER.FTEBRANCH123</metaData> </metaDataSet> </transferSet> <job> <name>Branch123</name> </job> </transaction>