• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于AOP概念實現(xiàn)事務(wù)同步框架

      2012-10-20 08:35:54吳瀟峰
      微型電腦應(yīng)用 2012年9期
      關(guān)鍵詞:接收端調(diào)用事務(wù)

      吳瀟峰

      0 引言

      眾多的大型跨國企業(yè),目前都會有一些IT策略來防止自身的應(yīng)用系統(tǒng)在互聯(lián)網(wǎng)上遭到黑客的攻擊。本文所涉及的客戶在其企業(yè)內(nèi)部網(wǎng)(信任區(qū)域)與互聯(lián)網(wǎng)(非信任區(qū))之間建立了一個DMZ(緩沖隔離區(qū))區(qū)域。此外,在緩沖隔離區(qū)與企業(yè)內(nèi)部網(wǎng)之間建立一層防火墻。并且使用IBM MQ產(chǎn)品作為跨越這兩個網(wǎng)絡(luò)區(qū)域的唯一的、可靠的數(shù)據(jù)傳輸通道。企業(yè)服務(wù)應(yīng)用系統(tǒng)被完全相同地部署在緩沖隔離區(qū)和企業(yè)內(nèi)部網(wǎng)絡(luò)中,并且各自擁有獨立的后臺數(shù)據(jù)庫系統(tǒng)。因此,為了使得這兩個數(shù)據(jù)庫中的數(shù)據(jù)同步和一致,必須每隔一段時間同步一次兩邊的事務(wù)處理。由于在緩沖隔離區(qū)和企業(yè)內(nèi)部網(wǎng)絡(luò)區(qū)之間,同時還部署著許多其他的應(yīng)用,并使用了相同的數(shù)據(jù)通道;所以用戶同時還需將每個數(shù)據(jù)包的大小限定為4MB之內(nèi),以防止瞬時的大數(shù)據(jù)量導致數(shù)據(jù)通道堵塞。

      根據(jù)以上的描述,這里有幾個問題需要我們?nèi)プ鱿鄳?yīng)的處理:

      實時的應(yīng)用服務(wù)同步操作,每個網(wǎng)絡(luò)區(qū)域中的事務(wù)處理都將在另一端重復發(fā)生。消息數(shù)據(jù)在發(fā)送時作分包處理,在接收端再作組裝處理。失效恢復處理。

      1 解決方案

      1.1 事務(wù)處理同步基礎(chǔ)框架

      一個事務(wù)處理同步的基礎(chǔ)框架模塊,如圖1所示:

      圖1 事務(wù)處理同步框架

      灰色圖框中的組件組成了通用的事務(wù)處理同步模塊。該模塊對業(yè)務(wù)層應(yīng)用提供了接口,業(yè)務(wù)層的應(yīng)用服務(wù)只需實現(xiàn)該接口,并在事務(wù)處理函數(shù)中調(diào)用由事務(wù)同步框架所提供的API,而無需了解底層的詳細調(diào)用實現(xiàn)。該API將串化所有的參數(shù)并將相應(yīng)的服務(wù)調(diào)用信息傳輸?shù)搅硪欢耍⒃诹硪欢送瑯拥恼{(diào)用執(zhí)行相應(yīng)的服務(wù)。

      相應(yīng)的事務(wù)同步處理具體流程如下:

      1.應(yīng)用服務(wù)調(diào)用事務(wù)同步處理模塊提供的接口函數(shù)去觸發(fā)事務(wù)同步服務(wù)。

      2.事務(wù)同步接口將串化所有的應(yīng)用服務(wù)中的參數(shù)數(shù)據(jù)及調(diào)用對象信息,并將根據(jù)預設(shè)的傳輸包大小限制進行分包和裝箱處理(根據(jù)應(yīng)用需求傳輸數(shù)據(jù)包的大小將被限定在4MB以下),并設(shè)置相應(yīng)的組號,一次服務(wù)調(diào)用只會具有一個相同的組號,以便于之后數(shù)據(jù)包的拆箱,隨后通過MQ控制器對串化后的數(shù)據(jù)進行傳輸。

      3.接收端的MessageBean將對指定的消息通道不間斷地進行監(jiān)聽。

      4.當接收端收到數(shù)據(jù)后,暫不做處理,將該串化的消息數(shù)據(jù)存入數(shù)據(jù)庫,待同組的數(shù)據(jù)包全部到達后一并處理。

      5.當處理到相應(yīng)的數(shù)據(jù)包時,首先將擁有相同組編號的一組數(shù)據(jù)包從數(shù)據(jù)庫中取出,并按序拆箱和拼接。

      6.在接收端將利用Java的反射機制來調(diào)用反串化后的相應(yīng)的服務(wù)函數(shù);相當于將發(fā)送端調(diào)用過的服務(wù)函數(shù)在對端相同地調(diào)用一次。如果在接收端調(diào)用成功并且事務(wù)提交沒有異常的話,將從數(shù)據(jù)庫中移除這一組數(shù)據(jù)包記錄。以表示該次事務(wù)同步已成功完成。

      1.2 在實現(xiàn)過程中應(yīng)用AOP理念

      如圖2所示:

      圖2 應(yīng)用Spring框架中AOP來實現(xiàn)事務(wù)同步

      對于事務(wù)同步處理流程的步驟2和步驟4,可以看出,在發(fā)送端的業(yè)務(wù)邏輯層的函數(shù)將會調(diào)用通用事務(wù)同步模塊提供的接口函數(shù),而在接收端則有事務(wù)同步模塊來調(diào)用相應(yīng)的業(yè)務(wù)邏輯層函數(shù)以達到事務(wù)同步的目的。使用了 Spring框架中的AOP來實現(xiàn)事務(wù)同步的調(diào)用。而應(yīng)用服務(wù)本身并不需要顯式地調(diào)用事務(wù)同步接口函數(shù);AOP的代理機制將會來執(zhí)行該調(diào)用。

      “Spring框架中使用代理的設(shè)計模式來實現(xiàn) AOP的功能。為了能對業(yè)務(wù)代碼調(diào)用順序有更好地控制,我們選用了AroundAdvice的模式。創(chuàng)建TransactionSyncInterceptor并實現(xiàn) MethodInterceptor接口中的 invoke()函數(shù)”[1]。并在其中截獲到的調(diào)用方法及參數(shù)信息進行串化及裝箱處理。在成功執(zhí)行MethodInterceptor.proceed()函數(shù)(即原業(yè)務(wù)服務(wù)方法)之后,系統(tǒng)將調(diào)用 MQ控制器提供的函數(shù)將串化和分組的消息數(shù)據(jù)放入MQ的消息隊列中。其中部分Java代碼描述如下:

      1.3 使用第三方開源組件Quartz

      本框架中還應(yīng)用了第三方開源組件 Quartz以實現(xiàn)可配置的定時執(zhí)行消息數(shù)據(jù)的拆箱及事務(wù)處理的執(zhí)行?!霸赒uartz中,當調(diào)度器被初始化后,它可以被啟動,置于一個待機狀態(tài)并可以被關(guān)閉。注意,一旦當調(diào)度器被關(guān)閉,那么它無法重新啟動直到它被重新初始化以后。觸發(fā)器也不會被激發(fā)(調(diào)度任務(wù)不會執(zhí)行)直到調(diào)度器被啟動。”[2]

      創(chuàng)建QuartzJobSchedulerServlet類,并將其配置在web server啟動的servlet列表中,同web servery一同啟動加載。部分Java代碼描述如下:

      1.4 選用MQ作為可靠的消息傳輸通道

      IBM WebSphere MQ產(chǎn)品能夠提供準確響應(yīng),超低延遲的并且完全符合JMS規(guī)范的企業(yè)級消息服務(wù)。

      WebSphere MQ使應(yīng)用程序在必要時通信,同時從開發(fā)和使用角度保持其獨立性。WebSphereMQ應(yīng)用(我們姑且稱之為應(yīng)用 A),將需要與之通信的其他應(yīng)用,看作是通過隊列表示的一組服務(wù)接口。這些其他應(yīng)用的物理實現(xiàn),可能隨著時間的推移而發(fā)生變化。

      “WebSphere MQ 可以降低應(yīng)用程序、Web服務(wù)或網(wǎng)絡(luò)失敗時數(shù)據(jù)丟失的風險。它也有助于確保數(shù)據(jù)不被復制,且作為工作或交易的一個單元完成??煽康慕桓兑馕吨鳺ebSphere MQ 形成了許多關(guān)鍵通信系統(tǒng)的驗證主干網(wǎng),并被委托交付業(yè)務(wù)關(guān)鍵型和高位值數(shù)據(jù)。WebSphere MQ 可以根據(jù)應(yīng)用程序和 Web 服務(wù)的需求,同步或異步地交付信息。它經(jīng)過某種配置后,也可以為次關(guān)鍵型數(shù)據(jù)提供較健壯質(zhì)量的服務(wù)?!盵3]

      2 主要輔助功能

      2.1 消息分包組件

      在發(fā)送端,超過限定大小的數(shù)據(jù)信息,將首先被分拆成小于4MB的數(shù)據(jù)包集合,并且每個數(shù)據(jù)包將具有一個統(tǒng)一的消息組編號和一個獨立組內(nèi)序列編號。在分拆后這些數(shù)據(jù)包,將通過MQ消息通道進行傳輸。

      在接收端,每個數(shù)據(jù)包都能按這兩組編號,重新合并成一個完整的數(shù)據(jù)包,然后通過反序列化和Java的反射機制,重新在接收端執(zhí)行一次相應(yīng)的服務(wù)調(diào)用。

      每個數(shù)據(jù)包的最大容量,是定義在一個系統(tǒng)配置文件中,可以按照不同的客戶的真實環(huán)境要求進行改變。不過必須保證的是在緩沖隔離區(qū)和企業(yè)內(nèi)部的該配置信息的一致性。

      2.2 包數(shù)據(jù)信息的持久性

      一旦包數(shù)據(jù)信息到達一端的本地消息隊列中,數(shù)據(jù)接收處理程序,將首先瀏覽一遍整個數(shù)據(jù)包,并且將該數(shù)據(jù)包存入數(shù)據(jù)庫,同時將該包數(shù)據(jù)從本地消息隊列中刪除。當所有同組的包數(shù)據(jù)信息到達后,進行包數(shù)據(jù)的組合與反串化,從而獲得能通過Java反射執(zhí)行的服務(wù)調(diào)用。只有當該服務(wù)調(diào)用的執(zhí)行成功后,才會將這一組的包數(shù)據(jù)信息從數(shù)據(jù)庫中移除。否則,這些包數(shù)據(jù)信息將一直被保存在數(shù)據(jù)庫中,并等待下一次的執(zhí)行,如圖3所示:

      圖3 包數(shù)據(jù)信息保存于數(shù)據(jù)庫

      2.3 失效恢復

      失效恢復,在該同步模塊中具有相當重要的作用,若要保持兩端數(shù)據(jù)的一致性,必須有類似于數(shù)據(jù)庫事務(wù)處理備份機制。因為在出現(xiàn)爆發(fā)式大數(shù)據(jù)量或者事務(wù)集中處理的時候,要確保偶發(fā)性的事務(wù)處理失敗或解/壓包數(shù)據(jù)出現(xiàn)錯誤時,系統(tǒng)能將狀態(tài)保持,并能保留完整的日志記錄及將來可重新執(zhí)行的事務(wù)數(shù)據(jù)。

      在事務(wù)同步模塊中,使用了包消息的持久機制,消息數(shù)據(jù)直到被成功拆箱執(zhí)行后才會被全部刪除。并有一個出錯恢復程式去監(jiān)控執(zhí)行過程中的錯誤,并且自動重新嘗試執(zhí)行該出錯服務(wù),直到該服務(wù)調(diào)用成功數(shù)據(jù)將被移除;或者超出最大重試次數(shù)后,數(shù)據(jù)被表示成不可執(zhí)行,可有管理員從日志中查獲相應(yīng)出錯信息,做出相應(yīng)的調(diào)整后,更改包數(shù)據(jù)的執(zhí)行狀態(tài),等待之后的重新執(zhí)行。該出錯恢復程式是一個基于時間觸發(fā)器的組件,所以失效恢復的執(zhí)行間隔都是可配置的,如圖4所示:

      圖4 失效恢復模組

      3 結(jié)論

      通過使用AOP的理念實現(xiàn)該事務(wù)同步框架,我們能夠得到以下具有優(yōu)勢的功能:

      1) 自動的失效恢復

      系統(tǒng)能在接收端的執(zhí)行期間,自動地恢復執(zhí)行失敗的服務(wù)調(diào)用。

      2) 在服務(wù)調(diào)用級別的同步

      通常的數(shù)據(jù)同步組件都是基于數(shù)據(jù)庫級別的同步。但是事實上,也許有時系統(tǒng)只是需要同步部分的數(shù)據(jù),那些有特殊服務(wù)所做的數(shù)據(jù)更新的同步。因此用這個事務(wù)同步框架就可實現(xiàn)基于服務(wù)級別的可配置的數(shù)據(jù)同步。并且框架可以與時下的SOA框架做到無縫連接整合。

      3) 用AOP技術(shù)達到低耦合

      對業(yè)務(wù)處理過程中的切面進行提取,它所面對的是處理過程中某個步驟或子階段,以獲得邏輯過程中各部分之間低耦合性的隔離效果。文中的事務(wù)處理同步框架正是使用了AOP的設(shè)計理念,運用配置文件來定制服務(wù)級別的數(shù)據(jù)同步。并可輕松提取運用到其他的企業(yè)服務(wù)中去。

      4) 多路由

      文中提及的案例是一個端對端的實例。事實上,我們可以通過配置來實現(xiàn)該事務(wù)處理同步框架的多路由功能,以達到一對多的消息發(fā)布目的。串化后的包消息可以通過配置好的路由信息并通過消息隊列發(fā)送到多個端。

      [1]Rod Johnson, Juergen Hoeller, Alef Arendsen, etc.The Spring Framework - Reference Documentation,URL:http://static.springsource.org/spring/docs/2.0.x/refer ence/index.html

      [2]Quartz 1.x Tutorial,URL:http://quartz-scheduler.org/documentation/quartz-1.x/tutorials

      [3]WebSphere MQ概述,URL:http://www-01.ibm.com/software/cn/websphere/inte gration/wmq/features/

      猜你喜歡
      接收端調(diào)用事務(wù)
      “事物”與“事務(wù)”
      基于分布式事務(wù)的門架數(shù)據(jù)處理系統(tǒng)設(shè)計與實現(xiàn)
      基于擾動觀察法的光通信接收端優(yōu)化策略
      頂管接收端脫殼及混凝土澆筑關(guān)鍵技術(shù)
      一種設(shè)置在密閉結(jié)構(gòu)中的無線電能傳輸系統(tǒng)
      新能源科技(2021年6期)2021-04-02 22:43:34
      基于多接收線圈的無線電能傳輸系統(tǒng)優(yōu)化研究
      河湖事務(wù)
      核電項目物項調(diào)用管理的應(yīng)用研究
      LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
      基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
      同江市| 孝感市| 滨州市| 通化县| 乳山市| 黄大仙区| 丘北县| 清涧县| 交口县| 吉水县| 马龙县| 博客| 扎兰屯市| 漯河市| 周口市| 洪湖市| 安丘市| 息烽县| 沾化县| 客服| 建昌县| 抚松县| 当阳市| 武义县| 台前县| 辉南县| 中山市| 灌云县| 闸北区| 女性| 五峰| 育儿| 新河县| 崇信县| 大理市| 南阳市| 怀化市| 阿坝| 紫金县| 托里县| 黄石市|