OpenHandX-Batch
快速部署手冊
2010-3-23
作者:彭明華
本文檔中的任何部分都不得以任何手段任何形式進行復制與傳播
目錄
1 前言
OpenHandX-Batch異步批量框架的功能在《OpenHandX-Batch企業級批量應用架構.doc》已經說得很清楚,OpenHandX-Batch異步批量架構由7大組件構成,用戶可以根據自己的情況選配不同的組件實現熱插拔,因此組件的組合非常多。本文就如何快速部署一個標準的企業級批量架構來說明。
2 基本原理
再次重復一下基本原理。
舉例說明異步批量的最基本原理,實際應用要比這復雜得多。比如:某企業要生成年終表報,并且年終報表要按照企業的各個部門、分公司出,報表的數據來源有企業的財務系統、ERP系統、CRM系統。
技術分析:
1、 生成報表首先要把數據從各個系統數據庫中進行數據抽取、加工、匯總,最終生成報表,每步操作都要按照各個部門、分公司分類
2、 總公司報表要等到各個部門和分公司加工、匯總的數據出來后再匯總,最后生成總公司報表
3、 各個部門和分公司的數據抽取、加工、匯總可以是并行處理的,各個部門和分公司的報表生成可以和總公司的數據匯總并行處理。
批量執行步驟:
由上圖可以看出OpenHandX-Batch異步批量框架需要部署總控服務器和任務服務器,為了便于說明,這里所有服務器之間的通訊采用數據庫。
3 總控服務器
總控服務器包括本身的配置和節點運行圖配置。本身的配置涉及到事件的接收、任務的發送、任務信息的接收、日志的記錄。節點圖配置是指事件將要做的明細及運行的流程。
首先給異步批量總控服務器和任務服務器創建一個數據庫,按照asynBatch.pdm創建表
其次配置節點圖,這里創建的樹型節點圖,主要配置分為4塊,以某公司年報表為例:
1、節點圖表BT_NODEMAP
NODEMAPID |
NAME |
PARAMS |
TYPE | |
說明 |
節點運行圖編號 |
節點運行圖名稱 |
預先定義每個節點的任務參數,格式: 參數1=xxx,參數2=xxx |
節點運行圖類型 0-樹型運行圖 1-層型運行圖 |
舉例 |
00001 |
年報表 |
0 |
2、節點表BT_NODES
NODEID |
PARAMS |
WEIGHT |
RERUN |
NAME |
ALIAS | |
說明 |
節點編號 |
預先定義當前節點的任務參數,格式: 參數1=xxx,參數2=xxx |
根據節點任務繁重情況設置,越繁重設置值越大,讓任務服務器留出更多的資源給此節點,默認為1 |
重跑模式 0-出錯流程退出 1-出錯忽略 2-出錯重試 |
對應任務運行服務器配置文件中的節點名稱 |
描述節點的中文名稱 |
舉例 |
00001 |
1 |
0 |
DPT1 |
部門數據抽取 | |
00002 |
1 |
0 |
DPT2 |
部門數據匯總 | ||
00003 |
1 |
0 |
DPTRPT |
部門報表生成 | ||
00004 |
1 |
0 |
HQ |
總公司數據匯總 | ||
00005 |
1 |
0 |
HQRPT |
總公司報表生成 |
3、樹型節點關系表BT_TREENODEMAPRELA
RELAID |
NODEMAPID |
PARENTIDS |
TYPE |
SOURCEID | |
說明 |
關系編號 |
對應節點圖編號,表示關系編號屬于哪個節點圖 |
依賴的父關系,格式: RELAID1,RELAID2 |
關系類型 0-為基本的節點 1-該節點為另一個自節點圖 |
與TYPE相關,對應節點編號或節點圖編號 |
舉例 |
00001 |
00001 |
0 |
00001 | |
00002 |
00001 |
00001 |
0 |
00002 | |
00003 |
00001 |
00002 |
0 |
00003 | |
00004 |
00001 |
00002 |
0 |
00004 | |
00005 |
00001 |
00004 |
0 |
00005 |
00002的上級是00001表示00002運行必須等到00001運行完成,00003和00004運行必須要等到00002運行完成。
4、事件結束最后執行的節點BT_FINYNODERELA
NODEMAPID |
ORDERCODE |
NODEID | |
說明 |
對應節點圖編號,表示關系編號屬于哪個節點圖 |
則執行的順序,一般從1開始 |
對應節點編號 |
舉例 |
00001 |
1 |
CLS |
00006節點是FINALLY節點,不管事件的流程執行中是否出現錯誤都在最后執行,類似Java代碼中的
try。。。finally
最后配置總控服務器的配置文件
<?xml version="1.0" encoding="UTF-8"?> <!-- 批量框架的異步總控配置文件,配置代表調度所依賴的數據信息。調度采用單一JVM運行模式。 配置內容包括調度數據服務信息。消息交互配置等
開發者: 彭明華 創建時間:2008-04-30 --> <configs> <controller id="001" acquireRetryDelay="1" waitRetryDelay="20" maxEventCount="5" correspond="false"/> <application id="app01" priority="0" persistent="true" loadPersistent="true" description="同一個jvm任務">
<chunk className="open.batch.controller.impl.application.MultiInstanceTreeNodeChunk"/>
<eventReceiver className="open.batch.controller.impl.message.DBEventReceiver" source=" testDb" params="table=BT_EVENTS"/> <taskSender className="open.batch.controller.impl.message.DBTaskSender" source="testDb" params="table=bt_tasks"/>
<resource>
</resource> </application> </configs> |
配置任務發送的實現類及對應的JMS和隊列名 |
如:
<taskSender className="open.batch.controller.impl.message.MessageTaskSender" source="pvmsjms" params="queue=task"/>
<resource>
</resource> |
4 任務服務器
任務服務器是具體執行任務的地方,因此它的配置有兩個:任務服務器配置、任務的節點配置
任務服務器配置
<application id="app01" priority="0">
<log className="open.batch.taskserver.impl.run.DBLog" source="testdb" params="table=BT_TASKSRUNLOG"/> <taskSenderclassName="open.batch.taskserver.impl.message.DBTaskSender" source="testdb" params="table=bt_taskinfos"/>
<resource> <databaseid="testdb" url="jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=GBK" driver="com.mysql.jdbc.Driver" username="root" password="111111" maxConnection="10"/> <databaseid="erpdb" url="jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=GBK"
</resource> <databaseid="crmdb" url="jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=GBK" driver="com.mysql.jdbc.Driver" username="root" password="111111" maxConnection="10"/> </resource> <databaseid="reportdb" url="jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=GBK" driver="com.mysql.jdbc.Driver" username="root" password="111111" maxConnection="10"/> </resource> </application> |
任務的節點配置(taskdefine.xml)
<taskDefines> <taskDefine name="DPT1" params=""> <taskRun singleInstance="true" className="open.dpt.Dpt"/>
<taskDefine name="DPT2" params="">
</taskDefine> <taskDefine name="DPTRPT" params=""> <taskRun singleInstance="true" className="open.dpt.DptReport"/> </taskDefine>
<taskDefine name="HQ" params=""> <taskRun singleInstance="true" className="open.hq.HQGatHer"/>
<taskDefine name="HQRPT" params=""> <taskRun singleInstance="true" className="open.hq.HQreport "/> </taskDefine> <taskDefine name="nullTask"/> </taskDefines> |
注意:總控服務器的BT_NODES表name與以上配置的節點名字要一致
5 如何向異步批量發起事件
只要應用程序向BT_EVENTS的表里寫入一條數據即發起一個新的事件
事件表BT_EVENTS
ID |
EVENTID |
PARAMS |
CREATETIME |
RECTIME |
NODEMAPID | |||
說明 |
事件表的自動編號 |
應用發起的事件編號或標示,應用通過此號找到已發的事件 |
定義整個事件的任務參數,格式: 參數1=xxx,參數2=xxx |
創建時間 |
接收時間 |
節點圖編號,與要BT_NODEMAP定義的運行圖節點編號一致,不同的編號決定使用不同的節點運行圖 | ||
舉例 |
[不填] |
RPT0001 |
dtpnum=001;002;003 |
[當前系統時間] |
[不填] |
00001 | ||
WEIGHT |
DESCRIPTION |
|||||||
權重,越大表示該事件的工作越多,讓總控服務器留出更多的資源給此事件,默認為1 |
描述 |
|||||||
5 |
年報表 |