Unterstützung mehrerer Server durch Verwendung des IBM MQ-Messaging-Providers aktivieren

Die Stapelumgebung kann so eingerichtet werden, dass einige Server als Stapeldispatcher fungieren und andere Server als Stapelsteuerprogramm. Stapeldispatcher akzeptieren Anforderungen von externen Clients und stellen sie für die Stapelsteuerprogramme bereit. Die Stapelsteuerprogramme empfangen Anforderungen, die ihrer definierten Funktionalität entsprechen, und führen diese Anforderungen aus. Stapeldispatcher und Stapelsteuerprogramme kommunizieren über Java Messaging Service (JMS) miteinander.

Informationen zu diesem Vorgang

Diese Task unterstützt Sie bei der Konfiguration des als Stapeldispatcher fungierenden Servers und des Stapelsteuerprogramms unter Verwendung des IBM MQ-Messaging-Providers.

Vorgehensweise

  1. Konfigurieren Sie den JMS-Stapeldispatcher.
    1. Fügen Sie der Datei server.xml das Feature wmqJmsClient-2.0 hinzu, um die JMS-Unterstützung zu aktivieren. Wenn Sie MQ unter z/OS im Bindungsmodus verwenden, fügen Sie das Feature zosTransaction-1.0 hinzu.
    2. Fügen Sie der Datei server.xml auf dem Server, der den Stapeldispatcher hostet, das Element batchJmsDispatcher hinzu.
      <batchJmsDispatcher connectionFactoryRef={Referenz auf eine konfigurierte JMS-Verbindungsfactory}
      	queueRef={Referenz auf eine konfigurierte JMS-Warteschlange} />
      Anmerkung: Wenn Sie die Attribute connectionFactoryRef und queueRef nicht angeben, wird für connectionFactoryRef der Standardwert batchConnectionFactory und für queueRef der Standardwert batchJobSubmissionQueue verwendet. Sie können das Element batchJmsDispatcher als <batchJmsDispatcher/> angeben. Die JMS-Verbindungsfactory batchConnectionFactory und die JMS-Warteschlange batchJobSubmissionQueue müssen trotzdem in der Datei server.xml konfiguriert werden.
    3. Nehmen Sie die entsprechende JMS-Verbindungsfactory und JMS-Warteschlange in die Serverkonfiguration auf. Dies ist nicht spezifisch für die Stapelkonfiguration.

      Das folgende Beispiel zeigt die Konfiguration des JMS-Stapeldispatchers und die zugehörige JMS-Konfiguration mit dem IBM MQ-Bindungsmodus.

      <batchJmsDispatcher connectionFactoryRef="batchConnectionFactory"
      		      queueRef="batchJobSubmissionQueue" />
      
      <!-- WMQ-Ressourcenadapter -->
      <variable name="wmqJmsClient.rar.location"
         	value="${server.config.dir}/wmq.wlp.rar"/>
      
      <!-- nativeLibraryPath ist für den Bindungsmodus erforderlich -->
      <!-- Die Eigenschaften für die Wiederholung des Starts und der Verbindungswiederherstellung
           werden empfohlen, um die Zuverlässigkeit des Systems sicherzustellen. -->
      <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 ist die auf dem WMQ-System definierte Warteschlange -->
      <jmsQueue id="batchJobSubmissionQueue"
      	  jndiName="jms/batch/jobSubmissionQueue">
          <properties.wmqJms baseQueueName="BATCHQ"
      			  priority="QDEF"
      			  baseQueueManagerName="WMQX">
          </properties.wmqJms>
      </jmsQueue>

      Das folgende Beispiel zeigt die Konfiguration des JMS-Stapeldispatchers und die zugehörige JMS-Konfiguration mit dem IBM MQ im Clientmodus.

      <batchJmsDispatcher connectionFactoryRef="batchConnectionFactory"
      		      queueRef="batchJobSubmissionQueue" />
      
      <!-- WMQ-Ressourcenadapter -->
      <variable name="wmqJmsClient.rar.location"
         	value="${server.config.dir}/wmq.wlp.rar"/>
      
      <!-- Die Eigenschaften für die Wiederholung des Starts und der Verbindungswiederherstellung
           werden empfohlen, um die Zuverlässigkeit des Systems sicherzustellen. -->
      <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 ist die auf dem WMQ-System definierte Warteschlange -->
      <jmsQueue id="batchJobSubmissionQueue"
      	  jndiName="jms/batch/jobSubmissionQueue">
          <properties.wmqJms baseQueueName="BATCHQ"
      			  priority="QDEF"
      			  baseQueueManagerName="WMQX">
          </properties.wmqJms>
      </jmsQueue>
      Anmerkung: Stellen Sie sicher, dass Sie ein jmsConnectionFactory-Element, wie im Beispiel gezeigt, und kein jmsQueueConnectionFactory-Element referenzieren. Die Verwendung eines jmsQueueConnectionFactory-Elements funktioniert nicht. Ihre Konfiguration sollte sowohl ein jmsConnectionFactory-Element als auch ein jmsQueue-Element enthalten, aber kein jmsQueueConnectionFactory-Element.
  2. Konfigurieren Sie das JMS-Stapelsteuerprogramm.
    1. Fügen Sie der Datei server.xml das Feature wmqJmsClient-2.0 hinzu, um die JMS-Unterstützung zu aktivieren.
    2. Fügen Sie der Datei server.xml auf dem Server, der das Stapelsteuerprogramm hostet, das Element batchJmsExecutor hinzu.
      <batchJmsExecutor activationSpecRef={konfigurierte Aktivierungsspezifikation oder Stapelsteuerprogramm}
      	queueRef={Referenz auf die konfigurierte JMS-Warteschlange} />
      Anmerkung: Wenn Sie die Attribute activationSpecRef und queueRef nicht angeben, wird für activationSpecRef der Standardwert batchActivationSpec und für queueRef der Standardwert batchJobSubmissionQueue verwendet. Sie können das Element batchJmsExecutor als <batchJmsExecutor/> angeben. Die JMS-Aktivierungsspezifikation für batchActivationSpec und die JMS-Warteschlange batchJobSubmissionQueue müssen trotzdem in der Datei server.xml konfiguriert werden.

      [18.0.0.1 und höher]Wenn Sie die Stapelgruppensicherheit erzwingen möchten, aktivieren Sie das Liberty-Sicherheitsfeature, indem Sie das Feature app-Security-2.0 dem Feature-Manager in Ihrer server.xml-Datei hinzufügen. Fügen Sie außerdem das Attribut batchOperationGroupRef dem Element batchJmsExecutor, wie im folgenden Beispiel dargestellt, hinzu.

      <batchJmsExecutor activationSpecRef={konfigurierte Aktivierungsspezifikation oder Stapelsteuerprogramm}
              queueRef={Referenz auf die konfigurierte JMS-Warteschlange} />
    3. Nehmen Sie die entsprechende JMS-Aktivierungsspezifikation und JMS-Warteschlange in die Serverkonfiguration auf. Dies ist nicht spezifisch für die Stapelkonfiguration.
    4. Optional: [18.0.0.1 und höher]Wenn Sie die Stapelgruppensicherheit erzwingen möchten, fügen Sie die entsprechenden Zeilengruppen des Operationsgruppennamens dem Element batchJmsExecutor, wie im folgenden Beispiel dargestellt, hinzu.
      <batchJmsExecutor activationSpecRef={konfigurierte Aktivierungsspezifikation oder Stapelsteuerprogramm}
                    queueRef={reference to the configured JMS queue} >
              <operationGroup>GroupA</operationGroup>
       </batchJmsExecutor>
      Anmerkung: Sie müssen die Sicherheitsregistry konfigurieren, um die zuvor aufgelisteten Gruppennamen zu unterstützen.
    5. Definieren Sie Leistungsmerkmale des Stapelsteuerprogrammservers, indem Sie in die Aktivierungsspezifikation einen JMS-Nachrichtenselektor aufnehmen.
      • Filterung auf der Basis systemdefinierter Eigenschaften:

        Für die JMS-Stapelnachricht sind eine Reihe von Stapeldispatchereigenschaften verfügbar, die das Stapelsteuerprogramm zum Filtern ankommender Nachrichten verwenden kann.

        • com_ibm_ws_batch_applicationName: Der Name der Stapelanwendung für die Jobanforderung.
        • com_ibm_ws_batch_moduleName: Der Modulname der Stapelanwendung für die Jobanforderung.
        • com_ibm_ws_batch_componentName: Der Komponentenname der Stapelanwendung für die Jobanforderung.
        Anmerkung: Es wird empfohlen, zumindest mit der Eigenschaft com_ibm_ws_batch_applicationName einen Nachrichtenselektor anzugeben, um sicherzustellen, dass das Steuerprogramm nur Jobs empfängt, die er verarbeiten kann.
        Im folgenden Beispiel legt das Attribut messageSelector für das Steuerprogramm fest, dass ein Job für die Anwendungen SimpleBatchJob und BonusPayout akzeptiert werden soll.
        messageSelector="com_ibm_ws_batch_applicationName = 'SimpleBatchJob' OR com_ibm_ws_batch_applicationName = 'BonusPayout'">
        Im folgenden Beispiel legt das Attribut messageSelector für das Steuerprogramm fest, dass ein Job für die Anwendung SimpleBatchJob akzeptiert werden soll.
        messageSelector="com_ibm_ws_batch_applicationName = 'SimpleBatchJob'">
      • Filterung auf der Basis benutzerdefinierter Eigenschaften:

        Der Stapeldispatcher legt alle Jobparameter, die der richtigen JMS-Nachrichteneigenschaft entsprechen, in seiner Anforderungsnachricht fest. Diese Eigenschaften können vom Nachrichtenselektor ebenfalls verwendet werden, um eine zusätzliche Filterung hinzuzufügen. Der Eigenschaftsname oder die Eigenschafts-ID muss die Bedingungen einer JMS-Nachrichteneigenschaft erfüllen. Beispielsweise ist die Eigenschaft eine unbegrenzte Folge von Buchstaben und Ziffern, wobei das erste Zeichen ein Buchstabe sein muss. Ein Buchstabe ist ein Zeichen, für das die Methode Character.isJavaLetter den Wert true zurückgibt und umfasst auch die Zeichen "_" und "$". Ein Buchstabe oder eine Ziffer ist ein Zeichen, für das die Methode Character.isJavaLetterOrDigit den Wert true zurückgibt. Weitere Informationen zu JMS-Nachrichtenselektoren finden Sie in der JMS-Javadoc.

        Im folgenden Beispiel verwendet ein potenzieller Nachrichtenselektor die Eigenschaft com_ibm_ws_batch_applicationName und den Jobparameter specialCapability.
        messageSelector="com_ibm_ws_batch_applicationName = 'SimpleBatchJob' AND specialCapability = 'superCapability'">
      [18.0.0.1 und höher]Das folgende Beispiel veranschaulicht das JMS-Stapelsteuerprogramm, das mit einer Operationsgruppe und der zugehörigen JMS-Konfiguration mit dem IBM MQ-Bindungsmodus konfiguriert wurde.
      <batchJmsExecutor activationSpecRef="batchActivationSpec"
      		  queueRef="batchJobSubmissionQueue"/>
            <operationGroup>GroupA</operationGroup>
      </batchJmsExecutor>
      
      <!-- WMQ-Ressourcenadapter -->
      <variable name="wmqJmsClient.rar.location"
                value="${server.config.dir}/wmq.wlp.rar"/>
      
      <!-- nativeLibraryPath ist für den Bindungsmodus erforderlich -->
      <!-- Die Eigenschaften für die Wiederholung des Starts und der Verbindungswiederherstellung
           werden empfohlen, um die Zuverlässigkeit des Systems sicherzustellen. -->
      <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 ist die auf dem WMQ-System definierte Warteschlange -->
      <jmsQueue id="batchJobSubmissionQueue"
      	  jndiName="jms/batch/jobSubmissionQueue">
          <properties.wmqJms baseQueueName="BATCHQ"
                priority="QDEF"
                baseQueueManagerName="WMQX">
          </properties.wmqJms>
      </jmsQueue>
      [18.0.0.1 und höher]Das folgende Beispiel veranschaulicht das JMS-Stapelsteuerprogramm, das mit einer Operationsgruppe und den zugehörigen JMS-Konfigurationen mit dem IBM MQ-Clientmodus konfiguriert wurde.
      <batchJmsExecutor activationSpecRef="batchActivationSpec"
      		  queueRef="batchJobSubmissionQueue"/>
            <operationGroup>GroupA</operationGroup>
      </batchJmsExecutor>
      
      <!-- WMQ-Ressourcenadapter -->
      <variable name="wmqJmsClient.rar.location"
                value="${server.config.dir}/wmq.wlp.rar"/>
      
      <!-- Die Eigenschaften für die Wiederholung des Starts und der Verbindungswiederherstellung
           werden empfohlen, um die Zuverlässigkeit des Systems sicherzustellen. -->
      <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 ist die auf dem WMQ-System definierte Warteschlange -->
      <jmsQueue id="batchJobSubmissionQueue"
      	  jndiName="jms/batch/jobSubmissionQueue">
          <properties.wmqJms baseQueueName="BATCHQ"
         	baseQueueManagerName="WMQX">
          </properties.wmqJms>
      </jmsQueue>
  3. Installieren Sie die Stapelanwendung auf dem Server. Weitere Informationen finden Sie unter Anwendungen in Liberty implementieren. [17.0.0.3 und höher]
    Anmerkung: Wenn Sie die Übermittlung von Jobnachrichten verzögern möchten, übergeben Sie den Job mit dem Jobparameter com_ibm_ws_batch_message_deliveryDelay und einem Wert in Millisekunden für die Verzögerungsdauer bei der Übermittlung der Nachricht an den Executor-Server. Wenn Sie bei IBM MQ Nachrichtenübermittlungen verzögern möchten, muss die SYSTEM.DDELAY.LOCAL.QUEUE vom Installationsjob CSQ4INSG IBM MQ definiert sein. Wenn die Warteschlange nicht definiert ist, wird ein Fehler des Typs MQRC_UNKNOWN_OBJECT_NAME angezeigt.

    Wenn Sie die Priorität der Jobnachricht ändern möchten, übergeben Sie den Job mit dem Jobparameter com_ibm_ws_batch_message_priority, der auf eine gültige JMS-Nachrichtenpriorität (0-9) gesetzt ist. Die JMS-Spezifikation definiert die Standardnachrichtenpriorität mit dem Wert '4'. Null ist die niedrigste Priorität und neun die höchste. Damit die Prioritätseinstellung wirksam werden, muss die Prioritätseinstellung in der Konfiguration properties.wmqJms auf APP anstelle von QDEF gesetzt sein. Wenn der Wert auf QDEF gesetzt ist, bewirkt dies, dass die Standardpriorität der Warteschlangendefinition verwendet wird. Für die Warteschlangendefinition selbst muss MsgDeliverySequence auf MQMDS_PRIORITY gesetzt sein.

    Ein Neustart eines fehlgeschlagenen Jobs verwendet dieselbe Verzögerung und Priorität wie der ursprüngliche Job, es sei denn, es wurde ein anderer Wert für den Jobparameter für Neustarts angegeben. Die Priorität wird an Nachrichten für serverübergreifende Partitionen weitergegeben, die Zustellungsverzögerung wird jedoch nicht weitergegeben.


Symbol das den Typ des Artikels anzeigt. Taskartikel

Dateiname: twlp_batch_multiJVMmq.html