基于Windows服務(wù)的異構(gòu)數(shù)據(jù)庫同步應(yīng)用方案
隨著電子信息化的發(fā)展與應(yīng)用,各個企業(yè)各個單位之間都開發(fā)和應(yīng)用了自己的信息化系統(tǒng)。各個單位之間使用了不同的開發(fā)技術(shù)和后臺數(shù)據(jù)庫,它們之間是分離,沒有關(guān)系的。企業(yè)集成不僅僅能創(chuàng)建一個三(表現(xiàn)層、業(yè)務(wù)層、數(shù)據(jù)訪問層)層應(yīng)用結(jié)構(gòu),還能使一個應(yīng)用分布到多臺計算機上。分布式應(yīng)用中,單個的一層是無法自己運行的,而集成應(yīng)用中的每一個應(yīng)用都能獨立運行,它們時間通過偶合完成功能。異步消息傳遞體系結(jié)構(gòu)來集成多個應(yīng)用,異構(gòu)數(shù)據(jù)庫的同步問題是實際項目中急待解決的問題
1 系統(tǒng)需求
電子數(shù)據(jù)交換最主要的任務(wù)是實現(xiàn)不同系統(tǒng),不同業(yè)務(wù)之間的數(shù)據(jù)交換與系統(tǒng)整合,下圖是一個實際項目中各個系統(tǒng)的分布圖(圖1),各個系統(tǒng)之間是彼此獨立的,使用各自不同的數(shù)據(jù)庫。首先企業(yè)端通過一站式申報平臺申報單證信息到海關(guān)由海關(guān)進行審批工作,如果海關(guān)審批通過,相應(yīng)的企業(yè)端信息狀態(tài)則進行變更,然后企業(yè)端發(fā)送車輛信息到物流園區(qū)場站系統(tǒng),場站系統(tǒng)接收到海關(guān)端的放行信息和企業(yè)端發(fā)送的車輛信息則進行車輛通過放行工作。
圖1
圖2
整個系統(tǒng)之間是通過各自獨立的Windows服務(wù)監(jiān)控自己的數(shù)據(jù)庫,對應(yīng)表發(fā)生變更以后,生成變更后的XML報文,通過路由設(shè)置由MQ消息隊列把報文發(fā)送到接收端,接收端服務(wù)接收到MQ報文以后,對接收的XML報文解析進入接收端數(shù)據(jù)庫。各個報文定義使用Schema定義來完成,只有符合Schema規(guī)則定義的報文才可以進入消息隊列來進行傳輸。例如客戶關(guān)系Schema報文定義如(圖2)所示,只有符合Schema格式的報文才可以生成XML報文進行傳輸。
2 系統(tǒng)框架
圖3
如(圖3)所示,傳輸系統(tǒng)使用了WINDOWS服務(wù)來完成數(shù)據(jù)傳輸?shù)模桓鶕?jù)上圖可以看出其內(nèi)部包括以下組成部分:
(1) WindowsServe_Fuzhou :Windows 服務(wù)組件,負責(zé)整個系統(tǒng)的數(shù)據(jù)傳輸;出庫動作:Adapter組件接收到自己數(shù)據(jù)庫變更的時候,通過對應(yīng)配置指定的Schema生成XML報文,發(fā)送報文到MQ消息隊列里面。入庫動作:接收到MQ隊列里面的XML報文、通過對應(yīng)的Schema進行報文格式的解析,符合格式要求的報文通過Adapter組件進入到自己的數(shù)據(jù)庫表里面。
(2) MSMQ :消息隊列傳輸組件,負責(zé)XML報文的傳輸工作;
(3) BIZTALK_MESSAGE:報文定義、解析、路由、配置組件;是整個傳輸系統(tǒng)的核心。使用配置文件來完成以上配置工作,提高系統(tǒng)的靈活性。
(4) LOG:系統(tǒng)日志模塊,用于報文的傳輸跟蹤與調(diào)試,建立統(tǒng)一的日志監(jiān)控平臺,完成對每一筆報文的監(jiān)視工作,同時可以對出現(xiàn)異常的報文進行分析工作,通過Web頁面顯示給客戶;
(5) SqlAdapter_fuzhou:數(shù)據(jù)庫(SQLSERVER)監(jiān)視組件,當(dāng)監(jiān)視到數(shù)據(jù)庫里面對應(yīng)的表發(fā)生變更以后,Adapter組件會啟動BIZTALK_MESSAGE消息處理模塊,對數(shù)據(jù)表里面的記錄進行操作,進行出入庫操作,服務(wù)的數(shù)據(jù)訪問層使用了傳統(tǒng)的三層架構(gòu)來完成,如(圖4)所示,數(shù)據(jù)庫與傳輸服務(wù)服務(wù)之間使用了ADO.net 進行數(shù)據(jù)庫訪問,通過數(shù)據(jù)訪問層(DAL)和業(yè)務(wù)邏輯層(BLL)完成,提高了系統(tǒng)的可讀性與靈活性;
圖4
(6) ORACLE Adapter:數(shù)據(jù)庫(ORACLE)監(jiān)視組件,對Oracle數(shù)據(jù)庫進行監(jiān)視工作,系統(tǒng)通過不同類型的Adapter實現(xiàn)的多種數(shù)據(jù)庫的訪問接口,如果有新的數(shù)據(jù)庫類型只需要增加對應(yīng)的Adapter就可以實現(xiàn)對應(yīng)的數(shù)據(jù)庫同步;
(7) Security_Module:消息傳遞過程中的加密解密組件,系統(tǒng)使用了證書加密機制來完成對XML報文的加密和解密工作;
具體代碼如下:
3 系統(tǒng)部署
系統(tǒng)編譯測試完成以后,需要把服務(wù)部署到對應(yīng)的系統(tǒng)上面,各個系統(tǒng)之間是通過網(wǎng)閘分離開來的,如(圖1)所示,一站式平臺、海關(guān)端系統(tǒng)、場站系統(tǒng)分別部署自己的服務(wù),各個服務(wù)之間協(xié)同工作用于完成報文的接收和發(fā)送工作,具體部署包括修改配置文件,DLL動態(tài)鏈接庫的裝配(其中Schema定義模塊需要裝配到操作系統(tǒng)目錄下面),運行數(shù)據(jù)庫腳本和具體的服務(wù)安裝工作(主要包括連接數(shù)據(jù)庫設(shè)置、報文監(jiān)控系統(tǒng)的設(shè)置)。安裝部署完成以后打開三個不同地點的WINDOWS服務(wù),系統(tǒng)部署完成,可以實現(xiàn)不同數(shù)據(jù)庫的同步工作。通過實際項目的運行工作,目前運行情況良好。
4 結(jié)束語
文章通過WINDOWS服務(wù)的數(shù)據(jù)訂閱分發(fā)機制給出了數(shù)據(jù)交換的一些具體解決方案。其中對XML報文的定義、解析、配置工作是系統(tǒng)實現(xiàn)的核心工作。也可以通過其他的技術(shù)來實現(xiàn)數(shù)據(jù)的傳輸工作,比如BIZTALK進行系統(tǒng)傳輸可以提高系統(tǒng)的穩(wěn)定性、工作流傳輸可以提高系統(tǒng)的流程配置靈活性,這里不再進行詳細的分析與描述。
參考文獻
[1] http://www.cnblogs.com/chnking/archive/2007/08/30/875947.html