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

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

JMS 1.1 通過統一的域簡化了消息傳遞

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

  JMS 構成了企業 java 應用程序中消息傳遞的基礎,但它一直以來都將點對點消息傳遞和發布/訂閱消息傳遞當作完全獨立的域來對待,這兩種域的消息傳遞目標的類型截然不同。JMS 1.0.2 API 對同時使用這兩種域的應用程序只提供很有限的支持,對開發與這兩種域的目標能一起工作得同樣好的可重用框架則不提供任何支持。JMS 1.1 統一了這兩種域,從而克服了這一缺點。請與 J2EE 設計師和編寫者 Bobby Woolf 一道,他將帶您探討使用 JMS 的最新版來開發 JMS 客戶機代碼是多么輕易。
   Java 消息服務(Java Message Service,JMS)API 是 J2EE 平臺的構成元素。JMS 1.0.2 定義了兩種類型的消息傳遞域(它們是相互獨立的),即點對點和發布/訂閱。JMS 的最新版本,即版本 1.1,將成為 J2EE 1.4 的一部分,EJB 2.1 也將會需要它,JMS 統一了這兩個域。有了 JMS 1.1,客戶機就不再必須專門針對這個或那個域進行實現了。相反,JMS 客戶機可以實現為能與來自任一域的目標一起工作。這極大地簡化了 JMS API,并為開發者創建更通用、重用性更好的消息傳遞代碼提供了機會。一旦有實現 JMS 1.1 的 JMS 提供程序和 J2EE 容器可供使用,JMS 客戶機代碼的開發者就應該可以開始在他們的新代碼中使用版本 1.1 的 API,并且也可以從將他們現有的 JMS 1.0.2 代碼移植到新的 API 中受益。
  
  我們將直接進入對新規范的討論,所以,假如您要溫習一下 JMS,請參閱 JMS 快捷介紹。
  
  三組接口
  在 JMS 1.0.2 中,三個通道接口 — Destination、Queue 和 Topic — 不幸地造成了 API 中的接口數量增加到三倍的后果。為了發送或接收消息,客戶機使用連接生成器來獲得一個連接,客戶機用這個連接來創建會話并獲得所期望的隊列和主題上的消息生產者和消費者。唯一的問題是每種目標都有它自己的生成器、連接、會話、生產者和消費者接口(基本上,就是它自己的接口域),表 1(出自 JMS Javadocs)總結了這一情況。
  
  表 1. 點對點和發布/訂閱接口的關系
  
  JMS 公共 PTP 域 Pub/Sub 域
  ConnectionFactory QueueConnectionFactory TopicConnectionFactory
  Connection QueueConnection TopicConnection
  Destination Queue Topic
  session QueueSession TopicSession
  MessagePRodUCer QueueSender TopicPublisher
  MessageConsumer QueueReceiver TopicSubscriber
  
  此外,為了與 XA(分布式)事務兼容,JMS 還提供了另一組接口。這意味著除了上表所示的 18 個接口之外,JMS 還有另外九個接口 — 生成器、連接和會話類型的 XA 版本 — 類型的數量達實際所需的三倍之多。
  
  JMS 1.1 的業界支持
  Java 2 平臺,企業版(Java 2 Platform,Enterprise Edition)的下一個主要發行版(J2EE 1.4;目前處于公共草案狀態)將包含 JMS 1.1,所以諸如 IBM WebSphere 和 BEA WebLogic 之類的 J2EE 容器(應用程序服務器)將需要實現 JMS 1.1,從而才能被認證為與 J2EE 1.4 兼容。類似的,Enterprise JavaBeans 規范的下一個版本(EJB 2.1;目前也處于公共草案狀態)將需要 JMS 1.1,以支持其 JMS 消息驅動的 bean。而且 J2EE 1.4 將包含 EJB 2.1,因此這些規范和 JMS 1.1 將融合到一起。
  
  有許多產品都實現了 JMS 1.0.2,但支持 JMS 1.1 或打算支持 JMS 1.1 的情況如何呢?
  
  目前有兩個以盈利為目的的消息傳遞系統(AshnaMQ 2.1 和 Sun ONE Message Queue,Platform Edition 3.0)和一個開放源代碼的消息傳遞系統(JORAM 3.1.0)實現了 JMS 1.1,但沒有任何其它 JMS/J2EE 供給商,包括 IBM、BEA Systems、TIBCO Software 和 Sonic Software 已經公布打算在它們產品的未來發行版中支持 JMS 1.1。鑒于目前都支持 JMS 1.0.2 或 J2EE 1.2 或 1.3,提供對 JMS 1.1 的支持看來只是一個時間問題。
  
  在上述 27 個接口中,只有六個公共接口(在第一列中的那些)是發送和接收消息所真正需要的。Queue 和 Topic 有時對于區別點對點方式和發布/訂閱方式而言很有用。表中的其它十個接口和九個 XA 接口中的至少六個實際上是不需要的,至少對于編寫客戶機代碼來說是不需要的。
  
  舉例來說,使用 JMS 1.0.2,假如開發者要訪問一個 Queue,他將使用 QueueConnectionFactory 來獲取一個 QueueConnection,以創建一個 QueueSession,這個 QueueSession 用來創建一個 QueueSender 或 QueueReceiver。但這樣的代碼是特定于隊列的,將不能與 Topic 一起工作。這種辦法在 JMS 1.1 中也行得通,但直接使用 ConnectionFactory、Connection、Session 和 MessageProducer 或 MessageConsumer,會簡單些,這后一種辦法能與 Topic 和 Queue 一起工作。因此,開發者應使用公共接口并避免使用特定于域的接口,因為公共接口使得代碼更簡單、更通用,重用性也更好。
  
  非統一接口
  在 JMS 1.0.2 中,客戶機代碼必須使用特定于域的隊列和主題接口。公共接口在很大程度上僅僅是一個形式,并不聲明客戶機所需要的許多方法。例如:Destination 壓根不實現任何方法;MessageProducer 不實現 send 方法;MessageConsumer 的確實現 receive,但 Session 客戶機無法創建 MessageConsumer;如此等等。
  
  這樣,對于一個要發送和接收 Queue 中的消息的客戶機,它必須使用表 1 的第二列中的類,而使用 Topic 的類似客戶機則必須使用表 1 的第三列中的類來實現很相似的代碼。公共接口中缺乏這種多態性使得不可能通過主題重用隊列客戶機,反過來重用也不可能,這導致了如清單 1 所示的那種重復性代碼。
  
  域統一化
  JMS 1.1 中的主要變化是添加了新的 API,以支持能同時與點對點或發布/訂閱域一起工作的客戶機代碼。最新的發行版在公共接口中添加了一些方法,從而使主題和主題擴展具有多態性。
  
  例如,MessageProducer 如今實現了 send,所以,客戶機可以給目標發送消息而不必知悉該目標是一個隊列還是一個主題。類似地,MessageConsumer 聲明了 receive 方法,所以,相同的客戶機代碼不論是使用隊列接收程序還是主題訂閱程序都能工作。
  
  清單 2 顯示了如何使用這個統一接口獲取生產者和消費者。清單 1 所示的 JMS 1.0.2 代碼需要四個方法(一對用于隊列,另一對用于主題),而 JMS 1.1 代碼則只需要兩個方法(一對用于目標)。
  
  這些新的 API 使得開發者能夠編寫重用性好得多的 JMS 客戶機代碼。JMS 客戶機代碼只是訪問并使用目標而無須知道哪些目標是隊列,哪些目標是主題。被編寫用來訪問隊列的代碼還可以不加修改就以相同方式被重用來訪問主題,反之亦然。這對于 JMS 1.0.2 來說是不可能的。
  
  因為公共接口現在幾乎能夠執行它們的特定于域的擴展所能做的所有相同任務(例如,MessageProducer 幾乎可以做 QueueSender 和 TopicPublisher 能做的所有任務),所以,特定于域的子接口實際上已不再需要。這些接口在 JMS 的未來版本中很可能會被去掉。
  
  共享事務
  將消息傳遞域統一起來的微妙但重要的結果是,隊列和主題現在可以通過同一個會話(從而在同一個事務中)進行訪問。在 JMS 1.0.2 中,QueueSession 可以訪問不止一個 Queue,TopicSession 可以訪問多個 Topic,但單個會話不能既訪問隊列又訪問主題。因為會話治理著事務,所以單個事務不能既用來控制隊列,又用來控制主題。
  
  在 JMS 1.1 中,不但單個 Session 可以訪問 Queue 或 Topic(任一類型的 Destination),而且單個會話實例可以用來操縱一個或多個隊列以及一個或多個主題,一切都在單個事務中進行。這意味著單個會話可以(例如)創建隊列和主題中的生產者,然后使用單個事務來同時發送隊列和主題中的消息。因為單個事務跨越兩個目標,所以,要么隊列和主題的消息都得到發送,要么都未得到發送。類似地,單個事務可以用來接收隊列中的消息并將消息發送到主題上,反過來也可以,如清單 3 所示。
  
  考慮一個客戶跟蹤應用程序,它給要使用客戶信息的其它應用程序(其中之一是送貨應用程序)提供信息。跟蹤應用程序可能需要告知其它應用程序某個特定客戶的地址已經變更。假如使用消息傳遞,則該應用程序將把這項變更發布到主題 CustomerChanges 上,所有要使用客戶信息的應用程序將訂閱這個主題。客戶跟蹤應用程序可能要求每個訂閱者回報該訂閱者是否能夠成功處理該項變更??蛻舾檻贸绦驅⒅付ㄒ粋€隊列 ChangeProcessed,每個訂閱者應用程序將使用這個隊列來發送應答。
  
  訂閱者應用程序,如發貨應用程序將接收 CustomerChanges 主題上的變更消息,處理這個消息,然后發送一個應答到 CustomerChanges 隊列上。為了確保沒有任何變更被丟失,這三個步驟(接收請求、處理請求和發送應答)應該在單個原子事務中進行。這意味著發貨應用程序必須使用同一個會話來訪問 CustomerChanges 主題和 ChangeProcessed 隊列。在 JMS 1.0.2 中,會話不能既訪問主題又訪問隊列,但在 JMS 1.1 中則可以這樣做。
  
  結束語
  JMS 1.0.2 受害于子類型的爆炸式增長;因為對于每一個類型,都有該類型本身的一個接口、一個隊列擴展和一個主題擴展。三倍的接口意味著開發者要學習三倍的 API??蛻魴C代碼必須使用這個域或那個域,要么使用隊列那組擴展,要么使用主題那組擴展,所以針對一個而編寫的代碼不能用于另一個。
  
  JMS 1.1 統一了域,從而每個公共接口可以用來取代其特定于域的擴展。這意味著開發者要學習的接口更少了,并且同樣的客戶機代碼既可以用于隊列,又可以用于主題。此外,JMS 事務現在可以更輕易地跨越主題和隊列,這在域被統一起來之前是不可能的。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩精品在线播放| 久久夜色精品国产亚洲aⅴ| 日韩欧美aⅴ综合网站发布| 自拍视频国产精品| 国产丝袜精品第一页| 91国内产香蕉| 欧美日韩国产精品专区| 最近2019中文字幕一页二页| 日韩av在线影视| 国产精品一久久香蕉国产线看观看| 久久影视三级福利片| zzjj国产精品一区二区| 日韩av影片在线观看| 不卡伊人av在线播放| 欧美激情视频一区| 日韩精品亚洲精品| 欧美丰满少妇xxxxx| 国产欧美婷婷中文| 精品国产乱码久久久久久虫虫漫画| 91av在线国产| 日韩欧美aⅴ综合网站发布| 欧美日韩不卡合集视频| 51午夜精品视频| 九色成人免费视频| 亚洲综合一区二区不卡| 久久成年人视频| 日韩欧美精品免费在线| 亚洲第一黄色网| 欧美亚洲成人精品| 亚洲无线码在线一区观看| 一区二区三区无码高清视频| 国产主播在线一区| 欧洲午夜精品久久久| 97超级碰碰碰| 日本欧美爱爱爱| 成人欧美一区二区三区在线| 国产精品爱久久久久久久| 欧美日产国产成人免费图片| 欧美日韩国产在线| 久久久爽爽爽美女图片| 欧美日韩激情小视频| 亚洲欧美日本伦理| 91chinesevideo永久地址| 欧美在线影院在线视频| 亚洲自拍小视频免费观看| 久久国产加勒比精品无码| 美日韩精品免费观看视频| 日日噜噜噜夜夜爽亚洲精品| 国产在线视频91| 91久久中文字幕| 亚洲国产精彩中文乱码av在线播放| 欧美激情亚洲精品| 九九九热精品免费视频观看网站| 欧美日韩爱爱视频| 亚洲精品国精品久久99热| 色无极影院亚洲| 最近2019好看的中文字幕免费| 亚洲女性裸体视频| 亚洲精品在线不卡| 亚洲人成网站999久久久综合| 国产精品igao视频| 亚洲第一男人天堂| 国产一区二区三区在线播放免费观看| 一区二区三区美女xx视频| 福利一区福利二区微拍刺激| 国产欧美一区二区三区在线看| 国产免费观看久久黄| 中文字幕亚洲欧美在线| 美乳少妇欧美精品| 欧美成人精品激情在线观看| 中文字幕久久久| 综合网日日天干夜夜久久| 欧美怡红院视频一区二区三区| 欧美中文在线观看国产| 亚洲春色另类小说| 97超碰蝌蚪网人人做人人爽| 久久久亚洲国产天美传媒修理工| 美女视频黄免费的亚洲男人天堂| 中文字幕av一区中文字幕天堂| 国产精品视频yy9099| 欧美午夜激情小视频| 九九热这里只有精品免费看| 91情侣偷在线精品国产| 97久久超碰福利国产精品…| 国产美女直播视频一区| 992tv在线成人免费观看| 精品国偷自产在线| 日韩免费黄色av| 亚洲欧美日韩精品久久| 日韩在线视频线视频免费网站| 91大神福利视频在线| 午夜欧美大片免费观看| 成人国产精品一区| 国产成人综合精品在线| 欧美激情va永久在线播放| 日韩在线视频观看| 在线观看国产精品日韩av| 亚洲最大激情中文字幕| 国产精品69精品一区二区三区| 韩国国内大量揄拍精品视频| 亚洲欧美日韩天堂一区二区| 亚洲免费av片| 国产精品pans私拍| 国产专区精品视频| 在线看片第一页欧美| www国产亚洲精品久久网站| 在线观看欧美成人| 日本sm极度另类视频| 日韩精品极品视频| 国产精品福利网| 日韩电影视频免费| 欧美成人中文字幕| 久久视频在线观看免费| 97精品一区二区视频在线观看| 国产精品高潮呻吟久久av黑人| 亚洲国产精品成人精品| 久久久久久久久久国产| 日韩小视频在线观看| 2019中文字幕在线| 久久九九亚洲综合| 久久久久国产视频| 中文精品99久久国产香蕉| 亚洲自拍偷拍色片视频| 久久97久久97精品免视看| 精品国模在线视频| 亚洲最大激情中文字幕| 欧美有码在线观看| 日韩精品丝袜在线| 福利视频一区二区| 亚洲大尺度美女在线| xx视频.9999.com| 亚洲欧美一区二区三区情侣bbw| 国产精品va在线播放| 欧美激情视频网| 亚洲变态欧美另类捆绑| 久久精品99久久久香蕉| 亚洲成在人线av| 欧美午夜丰满在线18影院| 国产精品久久久久久久久久小说| 亚洲欧洲国产伦综合| 日韩视频在线免费| 九九热r在线视频精品| 成人福利视频网| 日本久久久久亚洲中字幕| 色综合久久88色综合天天看泰| 国产在线a不卡| 日韩有码在线观看| 亚洲欧美中文日韩v在线观看| 91av在线看| 1769国内精品视频在线播放| 正在播放欧美一区| 日韩欧美一区二区在线| 国产精品久久久久一区二区| 欧美亚洲国产视频| 91极品视频在线| 国产在线拍揄自揄视频不卡99| 国产aaa精品| 欧美精品免费在线| 成人写真视频福利网| 国模精品视频一区二区三区| 亚洲精品国产品国语在线| 中文字幕在线观看日韩| 国产精品无av码在线观看| 久久久免费在线观看|