數據同步通用框架說明
框架說明
數據同步工具用來對兩個系統或者多個系統的數據進行同步處理,框架能夠實現項目開發人員只需配置兩邊系統需的業務數據,不需要關係數據是如何實現同步的,框架底層數據傳輸技術使用淘寶的開源框架metamorphosis簡稱metaQ,該框架是使用觀察者的設計模式來處理數據的中間介,發送端只需將數據發送到服務器,接收端進行監聽,一旦有新數據,就立刻可以接收到。
框架結構
系統常量中設置一些公用的常量,例如文件每次傳輸的大小,文件存放的路徑,項目的路徑等。
數據庫工具類主要封裝了一些基本的數據庫操作。
業務枚舉,主要包括數據傳輸方式,錯誤標記,業務類型,所屬系統等等。
框架接口主要定義了一些針對框架配置進行處理的操作,例如獲得標記池數據,打包數據等等。
MetaQ處理類,主要包含metaQ的實現方式-消息生產者、消息消費者。
定時服務程序,用來定時執行框架需要執行的操作。主要包括掃描標記池、監聽服務端數據。
業務線程,分爲普通數據發送線程,文件發送線程,普通數據接收線程,文件接收線程
工具類,主要封裝了一些常用的操作類,例如,文件處理類、json處理類,zip壓縮解壓處理類等。
詳細說明
定時服務
用於定時執行需要實現的業務
分爲數據發送線程、數據接收線程、文件發送線程、文件接收線程
數據發送線程
定時的從標記池中獲取相應業務需要處理的數據,通過數據同步業務配置表中根據sql查出需要打包的數據,並根據規定打包格式進行打包發送數據,如果數據發送成功,更新標記池數據,該條記錄設爲已同步,否則,下次繼續執行
數據接收線程
定時的從服務器中獲取業務端發送成功的數據,進行解包處理,這裏的接收線程屬於監聽線程,其中messge.getPartition().setAutoAck(false) 用來設置接收數據是否自動提交,如果自動提交,不論後面處理成功或者失敗,都獲取不到此條數據,如果爲不自動提交,用戶可以根據自己的需求來確定下次是否獲取此條數據,這裏準備設置爲自動條件,錯誤數據進行日誌記錄。
文件發送線程
定時的從標記池中獲取相應業務需要處理的數據,通過數據同步業務配置表中根據sql和模版配置查出需要傳輸的文件位置進行統一打包,並根據規定打包格式進行打包發送數據,數據發送採用已字節流的方式進行分塊傳輸,如果數據發送成功,更新標記池數據,該條記錄設爲已同步,否則,下次繼續執行
文件接收線程
定時的從服務器中獲取業務端發送成功的數據,進行解包處理,這裏的接收線程屬於監聽線程,其中messge.getPartition().setAutoAck(false) 用來設置接收數據是否自動提交,如果自動提交,不論後面處理成功或者失敗,都獲取不到此條數據,如果爲不自動提交,用戶可以根據自己的需求來確定下次是否獲取此條數據,這裏準備設置爲自動條件,錯誤數據進行日誌記錄,文件接收採用追加寫文件的方式,直至文件接收完畢再進行處理。
MetaQ 處理
普通生產者(Producer)
生產者可以向服務器中存在的任意topic中發送消息,供生產者使用,這裏的sessionFactory和Producer建議使用單例,不然會出現問題
普通消費者(Consumer)
消費者可以從服務器上存在的topic中獲取信息,這裏使用的是異步獲取,即獲取完一條數據之後,如果客戶端Consumer設置自動提交,下次獲取,此條記錄將獲取不到,這裏的sessionFactory和Consumer建議使用單例,不然會出現問題
文件生產者(FileProducer)
文件消費者(FileAsyncConsumer)
所需數據結構
標記池
存放業務端需同步的數據
日誌表
記錄接收錯誤數據
系統參數配置
用來通過業務端發送的業務ID來對業務端系統進行傳輸數據傳輸和處理,此表需對業務端數據庫進行操作
業務參數配置
用來設置相應的系統業務是否需進行同步,並關聯到metaQ相關配置
底層參數配置
用來配置metaQ相關配置,包括主題和分組
打包格式
1、普通同步數據
{sys:XXXX, type:XXXX, signId:XXXX,data[{XXX},{}…..]}
2、文件同步數據
{sys:XXXX, type:XXXX,signId:XXXX,data[{XXX},{}…..]}
錯誤數據處理
消費端接收的數據處理失敗時,錯誤數據需進行日誌記錄,需要求發送端進行數據重傳,具體操作爲單獨創建錯誤數據處理通道,進行錯誤信息的傳輸,實施類似普通消息的發送,接收。
1、 現在主要爲通過SQL執行錯誤來判斷數據的正確性
2、 後期可以考慮通過驗證數據格式的正確性來判斷
使用說明
MetaQ服務器部署
MetaQ是建立在zookeeper之上的中間介,所以要使用MetaQ,必須搭建zookeeper服務環境,從官網上下載安裝程序包
直接解壓文件到指定目錄,執行bin目錄下的zkServer.cmd,啓動服務
MetaQ也一樣,從官網上下載安裝包
解壓文件,執行bin目錄下的metaServer.bat啓動服務
MetaQ和zookeeper都包含windows和Linux的兩個版本,目前最新版本必須使用JDK1.6版本。
具體的MetaQ 和zookeeper的相關配置需要參照官方文檔
定時服務部署
系統完成後,將系統工程打包成相應的jar 文件,並使用bat文件進行項目的自動啓用
定時服務使用
如果需要使用同步框架,用戶需要將框架相關數據表導入系統(當然也可以採用其他方案),主要包含,業務參數配置表、數據同步配置表、數據標記池表和數據接收日誌表
用戶需配置業務參數配置表和數據同步配置表,並將需要傳輸的數據安裝格式存入數據同步標記池中。業務參數配置中消息主題需要在服務端有相應的配置。
另外要根據MetaQ服務器存放的位置,相應的修改客戶端的IP和端口