使用 Liberty 內嵌傳訊提供者來啟用多伺服器分割區支援
您可以設定批次環境,讓某些伺服器充當批次分派器,而其他伺服器則充當批次執行程式。
開始之前
- 判斷管理內嵌訊息引擎的位置。可能會在批次分派伺服器、批次執行程式伺服器,或個別的伺服器上管理它。完成此作業前,必須先配置此伺服器。JMS Connection Factory 和啟動規格會在其配置中參照訊息引擎伺服器。
- 如果要配置訊息引擎,請執行下列動作:
- 將 wasJmsServer-1.0 特性新增至 server.xml。
- 新增 messageEngine 元素,來定義訊息引擎。定義批次分派器和批次執行程式所用的佇列。下列範例說明 server.xml 檔中的訊息引擎配置:
<!- 指定訊息引擎的埠。 本例中的埠是預設埠。當使用預設埠時,不需要此元素。--> <wasJmsEndpoint host="*" wasJmsPort="7280" wasJmsSSLPort="7290" enabled="true"> </wasJmsEndpoint> <messagingEngine> <!- 批次 JMS 訊息的佇列。--> <queue id="batchLibertyQueue" forceReliability="ReliablePersistent" receiveAllowed="true"/> </messagingEngine>
關於這項作業
批次分派器會接受外部用戶端的要求,並提供給批次執行程式使用。批次執行程式會接收符合其定義之功能的要求,並執行這些要求。如果工作是配置成執行分割區,批次執行程式會將它們提供給其他執行程式來執行。批次執行程式會利用 Java 傳訊服務 (JMS) 彼此通訊。這個作業利用 Liberty 內嵌傳訊提供者,協助您配置批次分派伺服器和批次執行程式。
程序
- 配置批次 JMS 分派器。
- 將 wasJmsClient-2.0 特性新增至 server.xml 檔中的特性管理程式,來啟用 JMS 支援。
- 在管理批次分派器的伺服器上,將 batchJmsDispatcher 元素新增至 server.xml 檔;例如:
<batchJmsDispatcher connectionFactoryRef={參照至所配置的 JMS Connection Factory} queueRef={參照至所配置的 JMS 佇列} />
註: 如果您沒有指定 connectionFactoryRef 和 queueRef 屬性,connectionFactoryRef 的預設值為 batchConnectionFactory,queueRef 的預設值為 batchJobSubmissionQueue。您可以將 batchJmsDispatcher 元素指定為 <batchJmsDispatcher />。在 server.xml 檔中,您仍必須配置 batchConnectionFactory JMS Connection Factory 和 JMS batchJobSubmissionQueue 佇列。 - 將對應 JMS Connection Factory 和 JMS 佇列新增至伺服器配置。不是只有批次配置,才這樣做。 下列範例說明批次 JMS 分派器配置及其 JMS 配置:註: remoteServerAddress 屬性指向管理 Liberty 訊息引擎之伺服器的 host:port。
<batchJmsDispatcher connectionFactoryRef="batchConnectionFactory" queueRef="batchJobSubmissionQueue" /> <jmsConnectionFactory id="batchConnectionFactory" jndiName="jms/batch/connectionFactory"> <properties.wasJms remoteServerAddress="host:7280:BootstrapBasicMessaging"> </properties.wasJms> </jmsConnectionFactory> <jmsQueue id="batchJobSubmissionQueue" jndiName="jms/batch/jobSubmissionQueue"> <properties.wasJms deliveryMode="Persistent" queuename="batchLibertyQueue"> </properties.wasJms> </jmsQueue>
註: 請確定您所參照的是 jmsConnectionFactory 元素(如範例所示),而不是 jmsQueueConnectionFactory 元素。如果使用 jmsQueueConnectionFactory 元素,將無法運作。您的配置應同時包含 jmsConnectionFactory 元素和 jmsQueue 元素,但不包含 jmsQueueConnectionFactory 元素。
- 配置批次 JMS 執行程式,以執行批次工作。
- 將 wasJmsClient-2.0 特性新增至 server.xml 檔中的特性管理程式,來啟用 JMS 支援。
- 在管理批次執行程式的伺服器上,將 batchJmsDispatcher 元素新增至 server.xml 檔。
<batchJmsExecutor activationSpecRef={所配置的啟動規格或批次執行程式} queueRef={參照至所配置的 JMS 佇列} />
註: 如果您沒有將 batchJmsDispatcher 元素新增至 server.xml 檔,伺服器就不會將分割區分派到多部伺服器上執行,而會在本端執行分割區。註: 如果您沒有指定 connectionFactoryRef 和 queueRef 屬性,connectionFactoryRef 的預設值為 batchConnectionFactory,queueRef 的預設值為 batchJobSubmissionQueue。您可以將 batchJmsDispatcher 元素指定為 <batchJmsDispatcher />。在 server.xml 檔中,您仍必須配置 batchConnectionFactory JMS Connection Factory 和 batchJobSubmissionQueue。 - 將對應 JMS Connection Factory 和 JMS 佇列新增至伺服器配置。 不是只有批次配置,才這樣做。下列範例說明批次 JMS 分派器配置及其 JMS 配置:註: remoteServerAddress 屬性指向管理 Liberty 訊息引擎之伺服器的 host:port。
<batchJmsDispatcher connectionFactoryRef="batchConnectionFactory" queueRef="batchJobSubmissionQueue" /> <jmsConnectionFactory id="batchConnectionFactory" jndiName="jms/batch/connectionFactory"> <properties.wasJms remoteServerAddress="host:7280:BootstrapBasicMessaging"> </properties.wasJms> </jmsConnectionFactory> <jmsQueue id='batchJobSubmissionQueue" jndiName="jms/batch/jobSubmissionQueue"> <properties.wasJms deliveryMode="Persistent" queuename="batchLibertyQueue"> </properties.wasJms> </jmsQueue>
- 在管理批次執行程式的伺服器上,將 batchJmsExecutor 元素新增至 server.xml;例如:
<batchJmsExecutor activationSpecRef={所配置的啟動規格或批次執行程式} queueRef={參照至所配置的 JMS 佇列} />
註: 如果您沒有指定 activationSpecRef 和 queueRef 屬性,activationSpecRef 的預設值為 batchConnectionFactory,queueRef 的預設值為 batchJobSubmissionQueue。您可以將 batchJmsExecutor 元素指定為 <batchJmsExecutor />。在 server.xml 檔中,您仍必須為 batchActivationSpec 配置 JMS 啟動規格,以及為 batchJobSubmissionQueue 配置佇列。 - 將對應 JMS 啟動規格和 JMS 佇列新增至伺服器配置。不是只有批次配置,才這樣做。
- 在啟動規格中包含 JMS 訊息選取器,來定義批次執行程式伺服器的功能。
- 根據系統定義的內容來過濾:
以下是批次 JMS 訊息上的可用批次分派器內容,可供批次執行程式用來過濾,以取得入埠訊息。
- com_ibm_ws_batch_applicationName:用來取得工作要求的批次應用程式名稱
- com_ibm_ws_batch_moduleName:用來取得工作要求的批次應用程式模組名稱
- com_ibm_ws_batch_componentName:用來取得工作要求的批次應用程式元件名稱
- com_ibm_ws_batch_work_type:工作類型:"Job"
註: 請使用至少一個 com_ibm_ws_batch_applicationName 內容,來指定訊息選取器,以確保該執行程式僅會接收它可處理的工作。下列範例指出 messageSelector 屬性,使執行程式只接受應用程式 SimpleBatchJob 的批次工作:messageSelector="com_ibm_ws_batch_applicationName = 'SimpleBatchJob' AND com_ibm_ws_batch_work_type = 'Job'">
- 根據使用者定義的內容來過濾:
批次分派器會設定所有的工作參數,且這些參數符合批次分派器要求訊息中的適當 JMS 訊息內容。訊息選取器也可以使用這些內容,在訊息選取器中新增額外的過濾條件。內容名稱或 ID 必須符合 JMS 訊息內容限制。 比方說,內容是長度不限的一連串字母和數字,且開頭必須是字母。只要 Character.isJavaLetter 方法傳回 true,字母可以是任何字元,包括 '_' 和 '$' 都是。只要 Character.isJavaLetterOrDigit 方法傳回 true,字母或數字可以是任何字元。如需 JMS 訊息選取器的相關資訊,請查看 JMS API 說明文件。
下列範例說明可能的訊息選取器,它使用 com_ibm_ws_batch_applicationName 內容和 specialCapability 工作參數:messageSelector="com_ibm_ws_batch_applicationName = 'SimpleBatchJob' AND specialCapability = 'superCapability'">
<batchJmsExecutor activationSpecRef="batchActivationSpec" queueRef="batchJobSubmissionQueue"/> <jmsActivationSpec id="batchActivationSpec" > <properties.wasJms destinationRef="batchJobSubmissionQueue" messageSelector="(com_ibm_ws_batch_applicationName = 'SimpleBatchJob' OR com_ibm_ws_batch_applicationName = 'BonusPayoutCDI') AND com_ibm_ws_batch_work_type='Job'" destinationType="javax.jms.Queue" remoteServerAddress="host:7280:BootstrapBasicMessaging"> </properties.wasJms> </jmsActivationSpec> <jmsQueue id="batchJobSubmissionQueue" jndiName="jms/batch/jobSubmissionQueue"> <properties.wasJms deliveryMode="Persistent" queueName="batchLibertyQueue"> </properties.wasJms> </jmsQueue>
- 根據系統定義的內容來過濾:
- 配置批次 JMS 執行程式,以便只執行分割區。
- 將 wasJmsClient-2.0 特性新增至 server.xml 檔中的特性管理程式,來啟用 JMS 支援。
- 在管理正在執行批次工作的批次執行程式的伺服器上,將 batchJmsExecutor 元素新增至 server.xml 檔。
<batchJmsExecutor activationSpecRef={所配置的啟動規格或批次執行程式} queueRef={參照至所配置的 JMS 佇列} replyConnectionFactoryRef={參照至所配置的 JMS Connection Factory} />
註: 如果您沒有指定 connectionFactoryRef 和 queueRef 屬性,connectionFactoryRef 的預設值為 batchConnectionFactory,queueRef 的預設值為 batchJobSubmissionQueue。您可以將 batchJmsDispatcher 元素指定為 <batchJmsDispatcher />。在 server.xml 檔中,您仍必須配置 batchConnectionFactory JMS Connection Factory 和 batchJobSubmissionQueue。 - 將對應 JMS Connection Factory 和 JMS 佇列新增至伺服器配置。不是只有批次配置,才這樣做。
- 在啟動規格中包含 JMS 訊息選取器,來定義批次執行程式伺服器的功能。
- 根據系統定義的內容來過濾:
以下是批次 JMS 訊息上的可用批次分派器內容,可供批次執行程式用來過濾,以取得入埠訊息。
- com_ibm_ws_batch_applicationName:用來取得工作要求的批次應用程式名稱
- com_ibm_ws_batch_moduleName:用來取得工作要求的批次應用程式模組名稱
- com_ibm_ws_batch_componentName:用來取得工作要求的批次應用程式元件名稱
- com_ibm_ws_batch_work_type:工作類型:"Partition"
- com_ibm_ws_batch_partitionNum(Type=Integer):要分派之分割區的分割區號碼
- com_ibm_ws_batch_stepName:定義在 JSL 中的步驟名稱
註: 請使用至少一個 com_ibm_ws_batch_applicationName 內容,來指定訊息選取器,以確保該執行程式僅會接收它可處理的工作。下列範例指出 messageSelector 屬性,使執行程式只接受應用程式 SimpleBatchJob 的分割區:messageSelector="com_ibm_ws_batch_applicationName = 'SimpleBatchJob' AND com_ibm_ws_batch_work_type = 'Partition'">
下列範例指出 messageSelector 屬性,使執行程式只接受應用程式 SimpleBatchJob 的分割區:messageSelector="com_ibm_ws_batch_applicationName = 'SimpleBatchJob' AND com_ibm_ws_batch_work_type = 'Partition' AND come_ibm_ws_batch_stepName = 'step1'">
- 根據使用者定義的內容來過濾:
批次分派器會設定所有的工作參數,且這些參數符合批次分派器要求訊息中的適當 JMS 訊息內容。訊息選取器也可以使用這些內容,在訊息選取器中新增額外的過濾條件。內容名稱或 ID 必須符合 JMS 訊息內容限制。 比方說,內容是長度不限的一連串字母和數字,且開頭必須是字母。只要 Character.isJavaLetter 方法傳回 true,字母可以是任何字元,包括 '_' 和 '$' 都是。只要 Character.isJavaLetterOrDigit 方法傳回 true,字母或數字可以是任何字元。如需 JMS 訊息選取器的相關資訊,請查看 JMS API 說明文件。
下列範例說明可能的訊息選取器,它使用 com_ibm_ws_batch_applicationName 內容和 specialCapability 工作參數:messageSelector="com_ibm_ws_batch_applicationName = 'SimpleBatchJob' AND specialCapability = 'superCapability'">
<jmsConnectionFactory id="batchConnectionFactory" jndiName="jms/batch/connectionFactory"/> <batchJmsExecutor activationSpecRef="batchActivationSpec" queueRef="batchJobSubmissionQueue"/> replyConnectionFactoryRef="batchConnectionFactory"/> <jmsActivationSpec id="batchActivationSpec" > <properties.wasJms destinationRef="batchJobSubmissionQueue" messageSelector="(com_ibm_ws_batch_applicationName = 'SimpleBatchJob' OR com_ibm_ws_batch_applicationName = 'BonusPayoutCDI') AND com_ibm_ws_batch_work_type='Partition'" destinationRef="batchJobSubmissionQueue" destinationType="javax.jms.Queue" remoteServerAddress="host:7280:BootstrapBasicMessaging"> </properties.wasJms> </jmsActivationSpec> <jmsQueue id="batchJobSubmissionQueue" jndiName="jms/batch/jobSubmissionQueue"> <properties.wasJms deliveryMode="Persistent" queueName="batchLibertyQueue"> </properties.wasJms> </jmsQueue>
- 根據系統定義的內容來過濾:
- 將批次應用程式安裝在伺服器上。如需相關資訊,請參閱將應用程式部署在 Liberty 中。 停用多伺服器分割區的執行:如果您想具有多伺服器支援,卻不想執行多伺服器分割區,可在 jsl 工作 XML 檔中,將 come.ibm.websphere.batch.partition.multiJVM 工作內容設為 false。下列範例說明停用多伺服器分割區的 JSL 工作:
<property name="com.ibm.websphere.batch.partition.multiJVM" value="false"/>
註: 如果您在遠端執行程式上執行分割區,不會建立該分割區的工作日誌。

檔名:twlp_batch_multipartitionsembed.html