與企業調度程序相集成
IBM WebSphere Application Server V8.5 和更高版本為基於 Java 的批處理應用程序提供了一個執行平台。除了提供功能豐富的編程模型和高級特性,比如並行處理、跳過記錄處理、重試步驟處理和 COBOL 支持,它還為批處理程序提供了企業級 “質量”,比如可用性、可恢復性和性能。與 WebSphere Application Server 支持相結合,WebSphere Batch 可成為一個富有吸引力的企業批處理解決方案選擇。
批處理框架簡化了不同的批處理作業的開發,但它們沒有在各種作業之間提供任何編排功能。這種企業級作業編排功能在傳統上使用企業調度程序來執行,比如 IBM Tivoli Workload Scheduler、Control-M 或 ASG-Zeke。企業調度程序可為在不同操作系統平台上運行的批處理作業提供集中化管理,並管理作業依賴性、作業監視和警告機制、自動化的作業重新啟動和恢復等高級特性。因此,企業調度程序和批處理框架提供了互補的特性,共同提供了一個完整的企業批處理解決方案。
WebSphere Batch 實質上是一個端點,企業調度程序可在這個端點上對批處理作業進行調度。本文通過細節和示例介紹了如何將 WebSphere Batch 與企業調度程序無縫地集成。此集成使企業調度程序成為了元調度程序,能夠為 WebSphere Batch 作業調度程序提供輸入。作業調度程序進而向企業調度程序告知作業狀態信息並更新執行日志。
出於簡單性考慮,本文沒有涉及安全方面或與 z/OS 環境的集成。
為了讓 WebSphere Batch 能夠與企業調度程序無縫地協同工作,WebSphere Batch 提供了以下特性:
多平台支持,使得在不同平台上運行的調度程序能夠使用它。
從企業調度程序提交和取消作業的能力。
持續反饋並最終將狀態返回給企業調度程序。
如本系列 之前的文章 中所述,WebSphere Batch 特性提供了 Web、EJB 和 Web 服務接口來執行作業管理。但是,為了滿足上述集成需求,(分布式平台上的)WebSphere Batch 提供了 WSGrid,這是一個基於 JMS 的集成解決方案。
企業調度程序通過一個 WSGrid 客戶端與 WebSphere Batch 交互,該客戶端是一個特定於平台的批處理程序;在 Windows 上為 WSGrid.bat,在 UNIX 平台上為 WSGrid.sh。WSGrid 客戶端基本上是一個向 WebSphere Application Server 作業調度程序發出請求的 JMS 程序。作業調度程序服務器(經過一個 MDB 應用程序增強)監聽預先配置的 SIBus 隊列上的作業請求。然後,MDB 應用程序將該請求傳遞給 WebSphere Application Server 作業調度程序,後者隨後會正常處理該請求。作業調度程序按預先確定的隊列不斷發出日志。WSGrid 客戶端在企業調度程序與 WebSphere Application Server 作業調度程序機器上的隊列之間往返通信,不斷更新企業調度程序。使用 WSGrid 大大簡化了這一集成,只需從企業調度程序調用一個 shell 程序就可以實現集成。圖 1 演示了此集成。
一個典型的 WSGrid 集成中的活動序列為:
企業調度程序調用 WSGrid 客戶端批處理文件。
WSGrid 客戶端將一個 JMS Request 消息放在 WebSphere 作業調度程序的預定義隊列上。
MDB 應用程序監聽請求隊列,獲取此請求消息並使用它提交作業。
然後在服務器端點上執行作業,就像平常從 Job Management Console 提交一樣。
來自服務器的輸出通過響應隊列返回給企業調度程序。
完成作業時,會將最終狀態發送給 WSGrid,然後關閉與 WebSphere 作業調度程序服務器的連接。在作業處理過程中,WSGrid 不斷獲取輸出,這些輸出進而由企業調度程序使用
使用本系列 第 3 部分 中開發的基礎架構設置和項目,您將按照以下步驟來設置 WSGrid:
使用 MDB 應用程序增強 WebSphere Scheduler 服務器,創建 JMS 基礎架構。這可以使用 wsgridConfig.py 腳本完成:
wsadmin.sh -f wsgridConfig.py -install -node <nodeName> -server <serverName> -providers <providerList>
其中 <providerList> 表示 “hostname,portnumber”,portnumber 是調度程序服務器的 SIB_ENDPOINT_ADDRESS 端口。
清單 1 給出了一次示例運行的輸出。
wsadmin -f wsgridConfig.py -install -providers "Anish-PC,7276" -node Anish-PCNode01 -server server1 WASX7209I: Connected to process "dmgr" on node Anish-PCCellManager01 using SOAP connector; The type of process is: DeploymentManager . . . . . wsgridConfig.py is performing install using target cluster or server : /Node:Anish-PCNode01/Server:server1/ MDI application name : JobSchedulerMDI JMS connection factory : com.ibm.ws.grid.ConnectionFactory JMS activation spec : com.ibm.ws.grid.ActivationSpec JMS input queue name : com.ibm.ws.grid.InputQueue JMS output queue name : com.ibm.ws.grid.OutputQueue Installing WSGrid JMS file store root : /tmp\JobSchedulerBus SIB identifier : JobSchedulerBus endpoint provider list : Anish-PC:7276
從上面清單中可以看出,此腳本在調度程序服務器上安裝了 MDB 應用程序,並創建了 JMS 基礎架構。我們看看此腳本安裝的各種組件:
MDB 應用程序 JobSchedulerMDI 充當著作業調度程序的接口。WSGrid 客戶端使用此 MDB 應用程序與作業調度程序交換消息。
總線 JobSchedulerBus(構建於 WebSphere Application Server SIBus 之上)在作業調度程序服務器上創建,它托管著:
請求隊列 com.ibm.ws.grid.InputQueue:MDB 在此隊列上監聽並獲取作業提交請求。
回復隊列 com.ibm.ws.grid.OutputQueue:MDB 使用作業進度日志和狀態在此隊列上提供響應。
com.ibm.ws.grid.ActivationSpec:用於將 JobSchedulerMDI MDB 綁定到請求隊列。
因為 WebSphere Application Server 已安裝,所以企業調度程序可以調用 WSGrid 客戶端。WSGrid 客戶端以參數形式獲取控制文件;這是一個簡單的屬性文件,包含與調度程序位置相關的信息。清單 2 給出了控制文件 wsgrid.cntl 的示例條目。
清單 2
scheduler-host=192.168.1.107
scheduler-port=9080
debug=false
在完成 WSGrid 配置後,您可以通過 WSGrid.sh/bat shell 腳本啟動它。清單 3 給出了使用腳本 WSGrid.bat 調用 WSGrid 客戶端的示例及其輸出。
WSGrid.bat wsgrid.cntl SkipAndParallelJob.xml WSGrid Version WAS85.WBAT [gm1217.01] 2012-04-24 16:15:25 CONTROL: scheduler-port=9080 CONTROL: debug=true CONTROL: scheduler-host=192.168.1.107 DEBUG: Obtain JES jobid in checkEnvironment DEBUG: No JES job id - running in shell. DEBUG: creating message lisenter with host=192.168.1.107 and port=9080 DEBUG: JobMessenger.decode: pw not encoded DEBUG: JobMessenger host=192.168.1.107 DEBUG: JobMessenger port=9080 DEBUG: Using correlator value= a479ea48-65a5-4fd8-852c-f2bdaf258ad3-b10ac453-bcb7-4467 -b49a-963c52380c50 DEBUG: JobMessenger: opening communications DEBUG: JobSchedulerServiceProxy: user=null DEBUG: JobSchedulerServiceProxy: protocol=http . . . . . . System.out: [10/01/12 19:30:52:040 EDT] ********** End SkipAndParallelJob:00257:00259 log ********** CWLRB5630I: [10/01/12 19:30:52:047 EDT] Step SkipAndParallelStep completes normally: ended normally CWLRB3800I: [10/01/12 19:30:52:053 EDT] Job [SkipAndParallelJob:00257] ended normally. CWLRB3880I: Job [SkipAndParallelJob:00257] ending status: RC=0
清單 3 中的日志展示了 WSGrid 如何向企業調度程序提供持續反饋。除了作業提交之外,WSGrid 還支持取消和重新啟動 WebSphere Batch 作業。在 WSGrid 作業被取消的情況下,這可以確保 WebSphere Batch 作業也會取消,從而確保兩個作業保持同步。
在分布式操作系統上,取消 WSGrid 客戶端也會觸發對 WebSphere Batch 運行的作業的取消。取消的作業最終會進入可重新啟動模式(清單 4)。
清單 4
CWLRB5630I: [10/21/12 06:22:38:250 EDT] Step SkipAndParallelStep completes [cancelled on iteration 5507]: cancelled ........................... ........................... CWLRB2580I: [10/21/12 06:22:38:360 EDT] [10/21/12 06:22:38:360 EDT] Job [SkipAndParallelJob:00272:00273] Step [SkipAndParallelStep] completed [cancelled]. CWLRB3820I: [10/21/12 06:22:38:360 EDT] Job [SkipAndParallelJob:00272:00273] ended abnormally [cancelled]. CWLRB5594I: [10/21/12 06:22:38:360 EDT] Step SkipAndParallelStep execution is complete: Cancelled or Stopped CWLRB3860W: [10/21/12 06:22:38:375 EDT] Job [SkipAndParallelJob:00272:00273] ended abnormally [and is restartable]
WSGrid 程序可使用一個額外參數進行提交,該參數指定重新啟動文件的名稱。在執行此操作時,WSGrid 程序創建包含作業 ID 的重新啟動文件。這個重新啟動文件可由 WSGrid 和它的調用企業調度程序使用,以識別需要重新啟動的作業的實例。
例如:
WSGrid.bat wsgrid.cntl SkipAndParallelJob.xml restart.properties
請注意額外的參數 restart.properties,它指定了重新啟動文件的名稱。在作業結束時,將會創建一個名為 restart.properties 的文件,其中包含以下這行代碼:
restart-job=SkipAndParallelJob:00278
要重新啟動作業,請使用以下命令:
WSGrid.bat wsgrid.cntl restart.properties
restart.properties 中指定的作業將重新啟動(清單 5)。
清單 5
WLRB5618I: [10/21/12 09:01:53:908 EDT] Initializing step SkipAndParallelStep batch data stream outputStream CWLRB5620I: [10/21/12 09:01:53:908 EDT] Opening step SkipAndParallelStep batch data stream outputStream CWLRB5612I: [10/21/12 09:01:53:908 EDT] Positioning SkipAndParallelStep batch data stream inputStream using restart token: 0;0 CWLRB5612I: [10/21/12 09:01:53:908 EDT] Positioning SkipAndParallelStep batch data stream outputStream using restart token: 0;NOTSET
結束語
本文探討了 WebSphere Batch 作業調度程序與企業調度程序之間的區別,展示了如何使用 WSGrid 客戶端輕松地集成 WebSphere Batch 與企業調度程序。還解釋了如何使用 WSGrid 客戶端取消和重新啟動作業。