亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

使用BMT消息驅動BEAN和SPRING進行高性能的消息處理

2019-11-18 12:41:00
字體:
來源:轉載
供稿:網友

  簡介

  自從被引入EJB 2.0規范后,消息驅動bean (MDB)已經成為幾乎所有企業java項目的基礎。MDB擁有一個簡單而整潔的API,用戶不需要創建或生成home和local/remote接口,所有這些使得Java開發社區迅速且廣泛地接受了MDB。如您所知,幾乎任何大型J2EE項目都有一個重要部分是與其它系統的集成有關的。一種集成不同系統的可取方法是使用面向消息中間件(MOM)提供的企業隊列(queue)和主題(topic)基礎架構,這要求所有的J2EE服務器都擁有自己的兼容JMS的MOM實現。

  看起來大部分企業J2EE項目取決于JMS消息的接收和/或發送。因此,J2EE架構設計者和開發者就一定要熟悉不同的消息消費和生產方法,因為這可能最終決定項目的成功或失敗。最近,開始出現一些MDB模型的替代方案,例如SPRing和ActiveMQ的消息驅動POJO。當前的MDB模型除了本身是一項有趣有用的技術外,其地位也得以確定,它足夠簡單,并且在J2EE社區中得到了廣泛的采用。

  本文主要關注基于MDB的傳統消費模型。本文將展示如何利用一種更高效的非事務型消息檢索來重構這一場景,而同時仍然保持業務用例的once-and-only-once服務質量(QoS);換句話說,業務代碼應該只處理消息一次,并且不應該丟失任何消息。這是最嚴格的服務質量,也是實現中最有趣的部分。

  傳統的消息消費模型

  可以說,在大多數的J2EE項目中,只要出現消費JMS消息的用例,都會使用MDB。除了最普通的情況外,假如從業務角度來看丟失傳入的消息和/或處理消息副本可以接受,這些MDB都使用容器治理事務(CMT)劃分模型和事務型屬性RequiresNew來部署。為了使這些設置可以生效,應當用事務型的QueueConnectionFactory(或TopicConnectionFactory)來配置MDB。在這樣的設置中,消息消費過程可以用下面的步驟來描述:

  • J2EE容器啟動一個JTA事務。
  • MDB所監聽的隊列/主題的XAResource被添加到事務中。
  • 從隊列/主題消費一條消息,并傳遞給MDB的onMessage()方法。
  • MDB處理消息。任何在MDB處理消息時會使用的事務型資源(比如:數據庫、其它隊列或主題以及JCA適配器)會被添加到步驟1中啟動的同一個JTA事務中(當然,只有在資源支持XA時才可以)。
  • 假如處理成功(onMessage()調用無異常地返回),則J2EE容器會對JTA事務中的所有資源執行一次兩階段提交。因為JTA事務所擁有的資源之一是消費JMS消息的目的地,一旦JTA事務提交成功,消息就會從隊列/主題中移除。
  • 假如處理失?。╫nMessage()調用拋出RuntimeException 異常),則J2EE容器會對表示步驟3中消費JMS消息的目的地的XAResource執行回滾,因此消息會停留在隊列/主題中,稍后可能被重新發送。此外,在這種情況下,MDB實例會被銷毀并從處理池中移除。

  如您所見,事務型消息消費的處理非常健壯。這樣的處理模型保證了once-and-only-once的服務質量;換句話說,消息要么被成功地處理一次,要么根本不被處理(可能在超出預定義的重試次數或生存時間或者轉移到停用(dead)消息隊列之后,被從隊列中移除)。

  傳統模型的缺點

  事務型消息消費模型盡管健壯且成功,但是它還是有一些嚴重的缺點。首先,分布式事務嚴重地影響了處理性能(當從本地事務切換到XA時,性能降低50%是不足為奇的)。

  第二個缺點是由CMT造成的,實際的事務提交發生在應用程序代碼之外,在onMessage()調用返回之后。這也許沒什么大不了的(究竟CMT的整體思想是要將應用程序從事務處理中解脫出來),但是存在一些令人不愉快的問題——一些錯誤情況直到事務提交后才進行偵測。例如,在BEA WebLogic Server中,默認情況下,所有由處理CMP bean(創建,更新等等)引起的DML操作都被延遲到事務提交階段。這意味著應用程序可以認為它成功地更新了CMP bean的一個實例,而實際上實際的SQL更新可能會因為違反數據庫的某種約束而失敗。最糟糕的是應用程序代碼不能夠對此做出反應或者只是恰當地進行記錄,因為它看不到異常。

  優化提議

  盡管對延遲的DML操作有一個應急方案(例如,在BEA WebLogic Server中,可以在部署描述符中禁用它),但是這伴隨著性能損失。J2EE服務器將不能再聚集和/或批處理SQL更新(以便執行更高效),或者將它們全部忽略(假如事務稍后被標記為回滾的話)。

  本文認為,采用一種bean治理事務(bean-managed transaction,BMT)方法可以提供同樣的服務質量,并對事務生命周期有更多的控制。應用程序代碼將有機會恢復和/或更清楚地報告錯誤,同時避免上述的CMT模型的所有缺點。此外,我們預料從事務作用域中移除消息檢索能帶來重大的性能提升。

  在討論BMT方法之前,我們需要分析在這種情況下從隊列中消費消息會發生什么。假如我們使用BMT 劃分部署MDB,J2EE服務器不會再把MDB監聽的JSM目的地(隊列或者主題)添加到事務中(事務將會在從隊列中取走消息之后開始)。在這種情況下,BMT MDB應當用部署描述符中的非XA連接工廠配置;否則J2EE服務器會部署失敗。

  根據JMS規范(JMS1.1第一節4.5.2),假如使用AUTO_ACKNOWLEDGE 或者 DUPS_OK_ACKNOWLEDGE模式非事務型地部署消息監聽器,并且onMessage()方法拋出RuntimeException或它的任何子類,則消息會被重新發送。換句話說,重新設計用例來使用BMT是有可能的,假如在處理消息時出錯的話,應用程序代碼可以拋出RuntimeException,消息就會被重新發送(重試)。這種方法很有效,因為使用RuntimeException來表示不可恢復的錯誤是很自然的(例如Spring Framework的異常層次結構基本上全是基于RuntimeException的子類)。消息會重新發送,直到達到一定的次數(可在MOM軟件層配置),之后它通常被丟棄或轉移到停用消息隊列,或者應用程序代碼會計算消息被重新發送的次數,并決定什么時候應當停止嘗試處理以及不處理就消費(假如適當的話,會產生錯誤消息)還是轉移到另外的隊列。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美大肥婆大肥bbbbb| 日韩av一卡二卡| 久久精品久久精品亚洲人| 亚洲一区二区三区四区视频| 国产视频综合在线| 国产精品久久久久久久美男| 午夜精品视频在线| 成人www视频在线观看| 国产精品网址在线| 国产精品视频精品| 国产欧美va欧美va香蕉在线| 久久不射电影网| 91免费在线视频| 日韩av大片在线| 国产亚洲精品久久久久久| 亚洲欧美精品中文字幕在线| 国产亚洲欧洲高清一区| 欧美日韩国产中文字幕| 久久久久女教师免费一区| 精品视频—区二区三区免费| 亚洲影视九九影院在线观看| 国产精品丝袜久久久久久高清| 欧美日韩亚洲激情| 亚洲老头老太hd| 丝袜亚洲欧美日韩综合| 亚洲性av网站| 久热精品在线视频| 国产精品成av人在线视午夜片| 国产精品视频网站| 国产精品永久免费观看| 91香蕉嫩草神马影院在线观看| 欧美日韩免费看| 久久免费视频在线| 91久久国产综合久久91精品网站| 久久伊人免费视频| 久久精品视频在线播放| 亚洲免费小视频| 亚洲成人精品在线| 2020久久国产精品| 亚洲一级一级97网| 最近2019好看的中文字幕免费| 91精品国产自产在线观看永久| 国产精品久久久久aaaa九色| 性欧美亚洲xxxx乳在线观看| 亚洲欧洲在线免费| 色妞色视频一区二区三区四区| 欧美另类暴力丝袜| 亚洲天堂av图片| 奇米成人av国产一区二区三区| 亚洲人a成www在线影院| 中文字幕日韩精品有码视频| 美女av一区二区三区| 亚洲人成免费电影| 超碰97人人做人人爱少妇| 国产乱肥老妇国产一区二| 日韩精品在线观| 久久久精品久久久| 成人精品一区二区三区电影黑人| 国产91精品久久久久久| 成人精品久久一区二区三区| 国产成人在线精品| 久久影视电视剧免费网站清宫辞电视| 正在播放欧美视频| 久久夜色精品国产欧美乱| 国模私拍一区二区三区| 亚洲自拍av在线| 狠狠色香婷婷久久亚洲精品| 国产精品女人网站| 亚洲成人精品久久| 中文字幕一区电影| 国产精品一区二区电影| 97视频国产在线| 色婷婷av一区二区三区在线观看| 狠狠综合久久av一区二区小说| 懂色av影视一区二区三区| 亚洲国产精品福利| 美女久久久久久久久久久| 成人性生交大片免费看视频直播| 日韩av一区二区在线观看| 久久久久免费视频| 热久久免费国产视频| 欧美一区二区三区免费观看| 日韩电影中文字幕在线观看| 亚洲国产一区二区三区四区| 成人在线免费观看视视频| 中文字幕在线观看日韩| 国产精品一区二区久久国产| 精品国产一区二区在线| 日韩电影中文 亚洲精品乱码| 欧美日韩一区二区三区在线免费观看| 日韩有码在线播放| 91精品国产99| 亚洲欧美激情另类校园| 午夜精品久久久久久久久久久久久| 欧美另类在线播放| 亚洲第一免费网站| 亚洲一区亚洲二区| 欧美一级大片在线免费观看| 久久精品中文字幕一区| 欧美日韩国产精品一区二区三区四区| 96国产粉嫩美女| 日韩av电影在线播放| 国产一区二区日韩| 92福利视频午夜1000合集在线观看| 国产精品第一视频| 91精品中国老女人| 亚洲精品电影久久久| 久久久亚洲欧洲日产国码aⅴ| 国产精品亚洲一区二区三区| 国产欧美久久一区二区| 亚洲激情电影中文字幕| 精品国产自在精品国产浪潮| 国内免费精品永久在线视频| 中文字幕日韩视频| 久久全球大尺度高清视频| 亚洲福利在线播放| 精品成人久久av| 欧美视频不卡中文| 日本亚洲欧洲色| 久久久久久久久久久91| 亚洲国模精品私拍| 免费91在线视频| 精品久久久久久亚洲国产300| 久久久久久久电影一区| 亚洲第一免费播放区| 日韩最新免费不卡| 日韩精品视频在线观看免费| 日本欧美爱爱爱| 欧美激情视频一区二区三区不卡| 日韩在线播放一区| 色先锋资源久久综合5566| 午夜精品久久久久久久久久久久久| 亚洲福利视频久久| 久热精品视频在线免费观看| 精品国产依人香蕉在线精品| 欧美激情在线观看视频| 精品av在线播放| 97视频在线观看亚洲| 国产成人精品午夜| 国产精品视频一区二区高潮| 国产不卡在线观看| 狠狠色香婷婷久久亚洲精品| 亚洲伊人第一页| 亚洲午夜久久久影院| 97人人做人人爱| 国产日韩换脸av一区在线观看| 中文字幕在线日韩| 日韩在线精品一区| 精品久久久久久久久久ntr影视| 亚洲国产成人一区| 92看片淫黄大片看国产片| 日韩激情av在线免费观看| 正在播放国产一区| 久久久av亚洲男天堂| 国产精品欧美日韩久久| 国产精品99导航| 亚洲在线视频观看| 岛国av午夜精品| 久久久精品国产亚洲| 国产精品96久久久久久又黄又硬| 欧美激情久久久| 亚洲人免费视频| 一区二区av在线| 国产精品视频永久免费播放|