Habilitación del soporte de varios servidores utilizando el proveedor de mensajería IBM MQ
El entorno de proceso por lotes puede configurarse para que unos servidores funcionen como asignadores por lotes, mientras que otros funcionen como ejecutores por lotes. Los asignadores por lotes aceptan solicitudes de clientes externos y hacen que estén disponibles para los ejecutores por lotes. Los ejecutores por lotes reciben solicitudes que coinciden con sus prestaciones definidas y las ejecutan. Los asignadores por lotes y los ejecutores por lotes se comunican utilizando Java Messaging Service (JMS).
Acerca de esta tarea
Esta tarea le ayuda a configurar el servidor de asignación de lotes y el ejecutor por lotes utilizando el proveedor de mensajería IBM MQ.
Procedimiento
- Configure el asignador de JMS por lotes.
- Habilite el soporte JMS añadiendo la característica wmqJmsClient-2.0 al gestor de características en el archivo server.xml. Si está utilizando MQ en z/OS en modo BINDINGS, añada la característica zosTransaction-1.0.
- Añada el elemento batchJmsDispatcher al archivo server.xml en el servidor que aloja el asignador por lotes.
<batchJmsDispatcher connectionFactoryRef={referencia a una fábrica de conexiones JMS configurada} queueRef={referencia a una cola JMS configurada} />
Nota: Si no especifica los atributos connectionFactoryRef y queueRef, el valor predeterminado de connectionFactoryRef es batchConnectionFactory y el valor predeterminado de queueRef es batchJobSubmissionQueue. Puede especificar el elemento batchJmsDispatcher como <batchJmsDispatcher/>. Todavía debe configurar la fábrica de conexiones JMS batchConnectionFactory y la cola JMS batchJobSubmissionQueue en el archivo server.xml. - Añada la fábrica de conexiones JMS correspondiente y la cola JMS a la configuración del servidor. Esto no es específico de la configuración por lotes.
El ejemplo siguiente ilustra la configuración del distribuidor JMS por lotes y su configuración de JMS usando el modo de enlaces de IBM MQ.
<batchJmsDispatcher connectionFactoryRef="batchConnectionFactory" queueRef="batchJobSubmissionQueue" /> <!-- adaptador de recursos wmq --> <variable name="wmqJmsClient.rar.location" value="${server.config.dir}/wmq.wlp.rar"/> <!-- nativeLibraryPath es necesario para la modalidad BINDINGS --> <!-- the startup retry and reconnect retry properties are recomendado para garantizar solidez del sistema.--> <wmqJmsClient nativeLibraryPath="/mqm/jms/java/lib" startupRetryCount=999 startupRetryInterval="1000ms" reconnectionRetryCount=10 reconnectionRetryInterval="5m"> </wmqJmsClient> <authData password="pwd" user="user"> </authData> <jmsConnectionFactory id="batchConnectionFactory" jndiName="jms/batch/connectionFactory"> <properties.wmqJms transportType="BINDINGS" queueManager="WMQX"> </properties.wmqJms> </jmsConnectionFactory> <!-- baseQueueName es la cola definida en el sistema WMQ --> <jmsQueue id="batchJobSubmissionQueue" jndiName="jms/batch/jobSubmissionQueue"> <properties.wmqJms baseQueueName="BATCHQ" priority="QDEF" baseQueueManagerName="WMQX"> </properties.wmqJms> </jmsQueue>
El ejemplo siguiente ilustra la configuración del asignador JMS de proceso por lotes y su configuración de JMS utilizando IBM MQ en la modalidad de cliente.
<batchJmsDispatcher connectionFactoryRef="batchConnectionFactory" queueRef="batchJobSubmissionQueue" /> <!-- adaptador de recursos wmq --> <variable name="wmqJmsClient.rar.location" value="${server.config.dir}/wmq.wlp.rar"/> <!-- the startup retry and reconnect retry properties are recomendado para garantizar solidez del sistema.--> <wmqJmsClient startupRetryCount=999 startupRetryInterval="1000ms" reconnectionRetryCount=10 reconnectionRetryInterval="5m"> </wmqJmsClient> <authData password="pwd" user="user"> </authData> <jmsConnectionFactory id="batchConnectionFactory" jndiName="jms/batch/connectionFactory"> <properties.wmqJms hostName="webs24.pok.stglabs.ibm.com" transportType="CLIENT" channel="WAS.JMS.SVRCONN" port="1414" queueManager="WMQX"/>> </properties.wmqJms> </jmsConnectionFactory> <!-- baseQueueName es la cola definida en el sistema WMQ --> <jmsQueue id="batchJobSubmissionQueue" jndiName="jms/batch/jobSubmissionQueue"> <properties.wmqJms baseQueueName="BATCHQ" priority="QDEF" baseQueueManagerName="WMQX"> </properties.wmqJms> </jmsQueue>
Nota: Asegúrese de que se hace referencia a un elemento jmsConnectionFactory, como se muestra en el ejemplo, y no a un elemento jmsQueueConnectionFactory. El uso de un elemento jmsQueueConnectionFactory no funciona. La configuración debe incluir ambos elementos, jmsConnectionFactory y jmsQueue, pero no un elemento jmsQueueConnectionFactory.
- Configure el ejecutor JMS por lotes.
- Habilite el soporte JMS añadiendo la característica wmqJmsClient-2.0 al gestor de características en el archivo server.xml.
- Añada el elemento batchJmsExecutor al archivo server.xml en el servidor que aloja el ejecutor por lotes.
<batchJmsExecutor activationSpecRef={especificación de activación configurada o ejecutor por lotes configurado} queueRef={referencia a la cola JMS configurada} />
Nota: Si no especifica los atributos activationSpecRef y queueRef, el valor predeterminado de activationSpecRef es batchActivationSpec y el valor predeterminado de queueRef es batchJobSubmissionQueue. Puede especificar el elemento batchJmsExecutor como <batchJmsExecutor/>. Todavía debe configurar la especificación de activación JMS para la cola JMS batchActivationSpec y batchJobSubmissionQueue en el archivo server.xml.Si desea que se imponga la seguridad de grupo por lotes, habilite la característica de seguridad de Liberty añadiendo la característica app-Security-2.0 al gestor de características al archivo server.xml. Además, añada el atributo batchOperationGroupRef al elemento batchJmsExecutor como se muestra en el ejemplo siguiente.
<batchJmsExecutor activationSpecRef={especificación de activación configurada o ejecutor por lotes configurado} queueRef={referencia a la cola JMS configurada} />
- Añada la especificación de activación JMS correspondiente y la cola JMS a la configuración del servidor. Esto no es específico de la configuración por lotes.
- Opcional:
Si desea imponer la seguridad de grupo por lotes, añada las stanzas de nombre de grupo de operaciones correspondientes al elemento batchJmsExecutor como se muestra en el ejemplo siguiente.
<batchJmsExecutor activationSpecRef={especificación de activación configurada o ejecutor por lotes configurado} queueRef={referencia a la cola JMS configurada} > <operationGroup>GroupA</operationGroup> </batchJmsExecutor>
Nota: Debe configurar el registro de seguridad para soportar los nombres de grupo listados anteriormente. - Defina las prestaciones del servidor ejecutor por lotes incluyendo un selector de mensajes JMS en la especificación de activación.
- Filtrado basado en propiedades definidas por el sistema:
Hay un conjunto de propiedades de asignador por lotes disponibles en el mensaje JMS por lotes que el ejecutor por lotes puede utilizar para filtrar los mensajes de entrada.
- com_ibm_ws_batch_applicationName: el nombre de la aplicación por lotes para la solicitud de trabajo
- com_ibm_ws_batch_moduleName: el nombre de módulo de la aplicación por lotes para la solicitud de trabajo
- com_ibm_ws_batch_componentName: el nombre de componente de la aplicación por lotes para la solicitud de trabajo
Nota: Se recomienda que se especifique un selector de mensaje con, al menos, la propiedad com_ibm_ws_batch_applicationName para asegurarse de que el ejecutor recibe solo trabajos que puede procesar.El ejemplo siguiente indica el atributo messageSelector para que el ejecutor acepte un trabajo para la aplicación SimpleBatchJob y BonusPayout.messageSelector="com_ibm_ws_batch_applicationName = 'SimpleBatchJob' OR com_ibm_ws_batch_applicationName = 'BonusPayout'">
El ejemplo siguiente indica el atributo messageSelector para que el ejecutor acepte un trabajo para la aplicación SimpleBatchJob.messageSelector="com_ibm_ws_batch_applicationName = 'SimpleBatchJob'">
- Filtrado basado en las propiedades definidas por el usuario:
El asignador por lotes establece todos los parámetros de trabajo que se ajustan a la propiedad de mensajes JMS adecuada en el mensaje de solicitud del asignador por lotes. El selector de mensajes también puede utilizar estas propiedades para añadir un filtrado adicional al selector de mensajes. El nombre de propiedad, o identificador, debe ajustarse a las restricciones de propiedad de mensaje de JMS. Por ejemplo, la propiedad es una secuencia de longitud ilimitada de letras y dígitos, el primero debe ser una letra. Una letra es cualquier carácter para el que Character.isJavaLetter devuelve true y se incluye '_' y '$'. Una letra o dígito es cualquier carácter para el cual el método Character.isJavaLetterOrDigit devuelve true. Comprube el Javadoc de JMS si desea más información sobre selectores de mensajes JMS.
El ejemplo siguiente ilustra un posible selector de mensajes utilizando la propiedad com_ibm_ws_batch_applicationName y un parámetro de trabajo specialCapability.messageSelector="com_ibm_ws_batch_applicationName = 'SimpleBatchJob' AND specialCapability = 'superCapability'">
El ejemplo siguiente ilustra el ejecutor JMS por lotes que está configurado con un grupo de operaciones y su configuración JMS utilizando la modalidad de enlace de IBM MQ.
<batchJmsExecutor activationSpecRef="batchActivationSpec" queueRef="batchJobSubmissionQueue"/> <operationGroup>GroupA</operationGroup> </batchJmsExecutor> <!-- adaptador de recursos wmq --> <variable name="wmqJmsClient.rar.location" value="${server.config.dir}/wmq.wlp.rar"/> <!-- se requiere nativeLibraryPath para modo BINDING --> <!-- the startup retry and reconnect retry properties are recomendado para garantizar solidez del sistema.--> <wmqJmsClient nativeLibraryPath="/mqm/jms/java/lib" startupRetryCount=999 startupRetryInterval="1000ms" reconnectionRetryCount=10 reconnectionRetryInterval="5m"> </wmqJmsClient> <authData password="pwd" user="user"> </authData> <JmsActivationSpec id="batchActivationSpec" > <properties.wmqJms destinationRef="batchJobSubmissionQueue" destinationType="javax.jms.Queue" messageSelector="com_ibm_ws_batch_applicationName = 'SimpleBatchJob' OR com_ibm_ws_batch_applicationName = 'BonusPayout'" transportType="BINDINGS" queueManager="WMQX"> </properties.wmqJms> </jmsActivationSpec> <!-- baseQueueName es la cola definida en el sistema WMQ --> <jmsQueue id="batchJobSubmissionQueue" jndiName="jms/batch/jobSubmissionQueue"> <properties.wmqJms baseQueueName="BATCHQ" priority="QDEF" baseQueueManagerName="WMQX"> </properties.wmqJms> </jmsQueue>
El ejemplo siguiente ilustra el ejecutor JMS por lotes que está configurado con un grupo de operaciones y sus configuraciones de JMS utilizando la modalidad de cliente de IBM MQ.
<batchJmsExecutor activationSpecRef="batchActivationSpec" queueRef="batchJobSubmissionQueue"/> <operationGroup>GroupA</operationGroup> </batchJmsExecutor> <!-- adaptador de recursos wmq --> <variable name="wmqJmsClient.rar.location" value="${server.config.dir}/wmq.wlp.rar"/> <!-- the startup retry and reconnect retry properties are recomendado para garantizar solidez del sistema.--> <wmqJmsClient startupRetryCount=999 startupRetryInterval="1000ms" reconnectionRetryCount=10 reconnectionRetryInterval="5m"> </wmqJmsClient> <authData password="pwd" user="user"> </authData> <JmsActivationSpec id="batchActivationSpec" > <properties.wmqJms destinationRef="batchJobSubmissionQueue" messageSelector="com_ibm_ws_batch_applicationName = SimpleBatchJob' OR com_ibm_ws_batch_applicationName = 'BonusPayout'" transportType="CLIENT" channel="WAS.JMS.SVRCONN" destinationType="javax.jms.Queue" queueManager="WMQX" hostName="webs24.pok.stglabs.ibm.com" port="1414"> </properties.wmqJms> </jmsActivationSpec> <!-- baseQueueName es la cola definida en el sistema WMQ --> <jmsQueue id="batchJobSubmissionQueue" jndiName="jms/batch/jobSubmissionQueue"> <properties.wmqJms baseQueueName="BATCHQ" baseQueueManagerName="WMQX"> </properties.wmqJms> </jmsQueue>
- Filtrado basado en propiedades definidas por el sistema:
- Instale la aplicación por lotes en el servidor. Para obtener más
información, consulte Despliegue de aplicaciones en Liberty. Nota: Para retardar la entrega de mensajes de trabajo, envíe el trabajo especificando un parámetro de trabajo de com_ibm_ws_batch_message_deliveryDelay que está establecido en el número de milisegundos para retardar la entrega del mensaje a un servidor ejecutor. Para que IBM MQ retarde la entrega de mensajes, SYSTEM.DDELAY.LOCAL.QUEUE debe definirse mediante el trabajo de instalación de IBM MQ CSQ4INSG. Si la cola no está definida, se muestra un error MQRC_UNKNOWN_OBJECT_NAME.
Para alterar la prioridad del mensaje de trabajo, envíe el trabajo especificando un parámetro de trabajo de com_ibm_ws_batch_message_priority que está establecido en una prioridad de mensaje de JSM válida (0-9). La especificación JMS define la prioridad del mensaje predeterminada como '4' con cero como la prioridad inferior y nueve como la superior. Para que entren en vigor los valores de prioridad, el valor de prioridad en la configuración properties.wmqJms debe establecerse en APP, en lugar de QDEF. Un valor de QDEF provoca que se utilice la prioridad predeterminada de la definición de cola. La propia definido debe tener MsgDeliverySequence establecido en MQMDS_PRIORITY.
El reinicio de un trabajo fallido utiliza el mismo retardo y la misma prioridad que el trabajo original, a menos que se especifique un valor diferente como parámetro de trabajo en el reinicio. La prioridad se propaga a mensajes para particiones de varios servidores, pero el retardo de la entrega no se ha propagado.

Nombre de archivo: twlp_batch_multiJVMmq.html