OpenHandX-Batch
快速部署手冊
2010-3-23
作者:彭明華
本文檔中的任何部分都不得以任何手段任何形式進行復制與傳播
目錄
1 前言
OpenHandX-Batch異步批量框架的功能在《OpenHandX-Batch企業(yè)級批量應用架構(gòu).doc》已經(jīng)說得很清楚,OpenHandX-Batch異步批量架構(gòu)由7大組件構(gòu)成,用戶可以根據(jù)自己的情況選配不同的組件實現(xiàn)熱插拔,因此組件的組合非常多。本文就如何快速部署一個標準的企業(yè)級批量架構(gòu)來說明。
2 基本原理
再次重復一下基本原理。
舉例說明異步批量的最基本原理,實際應用要比這復雜得多。比如:某企業(yè)要生成年終表報,并且年終報表要按照企業(yè)的各個部門、分公司出,報表的數(shù)據(jù)來源有企業(yè)的財務系統(tǒng)、ERP系統(tǒng)、CRM系統(tǒng)。
技術(shù)分析:
1、 生成報表首先要把數(shù)據(jù)從各個系統(tǒng)數(shù)據(jù)庫中進行數(shù)據(jù)抽取、加工、匯總,最終生成報表,每步操作都要按照各個部門、分公司分類
2、 總公司報表要等到各個部門和分公司加工、匯總的數(shù)據(jù)出來后再匯總,最后生成總公司報表
3、 各個部門和分公司的數(shù)據(jù)抽取、加工、匯總可以是并行處理的,各個部門和分公司的報表生成可以和總公司的數(shù)據(jù)匯總并行處理。
批量執(zhí)行步驟:
由上圖可以看出OpenHandX-Batch異步批量框架需要部署總控服務器和任務服務器,為了便于說明,這里所有服務器之間的通訊采用數(shù)據(jù)庫。
3 總控服務器
總控服務器包括本身的配置和節(jié)點運行圖配置。本身的配置涉及到事件的接收、任務的發(fā)送、任務信息的接收、日志的記錄。節(jié)點圖配置是指事件將要做的明細及運行的流程。
首先給異步批量總控服務器和任務服務器創(chuàng)建一個數(shù)據(jù)庫,按照asynBatch.pdm創(chuàng)建表
其次配置節(jié)點圖,這里創(chuàng)建的樹型節(jié)點圖,主要配置分為4塊,以某公司年報表為例:
1、節(jié)點圖表BT_NODEMAP
NODEMAPID |
NAME |
PARAMS |
TYPE | |
說明 |
節(jié)點運行圖編號 |
節(jié)點運行圖名稱 |
預先定義每個節(jié)點的任務參數(shù),格式: 參數(shù)1=xxx,參數(shù)2=xxx |
節(jié)點運行圖類型 0-樹型運行圖 1-層型運行圖 |
舉例 |
00001 |
年報表 |
0 |
2、節(jié)點表BT_NODES
NODEID |
PARAMS |
WEIGHT |
RERUN |
NAME |
ALIAS | |
說明 |
節(jié)點編號 |
預先定義當前節(jié)點的任務參數(shù),格式: 參數(shù)1=xxx,參數(shù)2=xxx |
根據(jù)節(jié)點任務繁重情況設置,越繁重設置值越大,讓任務服務器留出更多的資源給此節(jié)點,默認為1 |
重跑模式 0-出錯流程退出 1-出錯忽略 2-出錯重試 |
對應任務運行服務器配置文件中的節(jié)點名稱 |
描述節(jié)點的中文名稱 |
舉例 |
00001 |
1 |
0 |
DPT1 |
部門數(shù)據(jù)抽取 | |
00002 |
1 |
0 |
DPT2 |
部門數(shù)據(jù)匯總 | ||
00003 |
1 |
0 |
DPTRPT |
部門報表生成 | ||
00004 |
1 |
0 |
HQ |
總公司數(shù)據(jù)匯總 | ||
00005 |
1 |
0 |
HQRPT |
總公司報表生成 |
3、樹型節(jié)點關(guān)系表BT_TREENODEMAPRELA
RELAID |
NODEMAPID |
PARENTIDS |
TYPE |
SOURCEID | |
說明 |
關(guān)系編號 |
對應節(jié)點圖編號,表示關(guān)系編號屬于哪個節(jié)點圖 |
依賴的父關(guān)系,格式: RELAID1,RELAID2 |
關(guān)系類型 0-為基本的節(jié)點 1-該節(jié)點為另一個自節(jié)點圖 |
與TYPE相關(guān),對應節(jié)點編號或節(jié)點圖編號 |
舉例 |
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、事件結(jié)束最后執(zhí)行的節(jié)點BT_FINYNODERELA
NODEMAPID |
ORDERCODE |
NODEID | |
說明 |
對應節(jié)點圖編號,表示關(guān)系編號屬于哪個節(jié)點圖 |
則執(zhí)行的順序,一般從1開始 |
對應節(jié)點編號 |
舉例 |
00001 |
1 |
CLS |
00006節(jié)點是FINALLY節(jié)點,不管事件的流程執(zhí)行中是否出現(xiàn)錯誤都在最后執(zhí)行,類似Java代碼中的
try。。。finally
最后配置總控服務器的配置文件
<?xml version="1.0" encoding="UTF-8"?> <!-- 批量框架的異步總控配置文件,配置代表調(diào)度所依賴的數(shù)據(jù)信息。調(diào)度采用單一JVM運行模式。 配置內(nèi)容包括調(diào)度數(shù)據(jù)服務信息。消息交互配置等
開發(fā)者: 彭明華 創(chuàng)建時間: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> |
配置任務發(fā)送的實現(xiàn)類及對應的JMS和隊列名 |
如:
<taskSender className="open.batch.controller.impl.message.MessageTaskSender" source="pvmsjms" params="queue=task"/>
<resource>
</resource> |
4 任務服務器
任務服務器是具體執(zhí)行任務的地方,因此它的配置有兩個:任務服務器配置、任務的節(jié)點配置
任務服務器配置
<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> |
任務的節(jié)點配置(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與以上配置的節(jié)點名字要一致
5 如何向異步批量發(fā)起事件
只要應用程序向BT_EVENTS的表里寫入一條數(shù)據(jù)即發(fā)起一個新的事件
事件表BT_EVENTS
ID |
EVENTID |
PARAMS |
CREATETIME |
RECTIME |
NODEMAPID | |||
說明 |
事件表的自動編號 |
應用發(fā)起的事件編號或標示,應用通過此號找到已發(fā)的事件 |
定義整個事件的任務參數(shù),格式: 參數(shù)1=xxx,參數(shù)2=xxx |
創(chuàng)建時間 |
接收時間 |
節(jié)點圖編號,與要BT_NODEMAP定義的運行圖節(jié)點編號一致,不同的編號決定使用不同的節(jié)點運行圖 | ||
舉例 |
[不填] |
RPT0001 |
dtpnum=001;002;003 |
[當前系統(tǒng)時間] |
[不填] |
00001 | ||
WEIGHT |
DESCRIPTION |
|||||||
權(quán)重,越大表示該事件的工作越多,讓總控服務器留出更多的資源給此事件,默認為1 |
描述 |
|||||||
5 |
年報表 |