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

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

J2EE的異步消息機制

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

  作者:云起
  在分布式企業級應用程序中,異步消息機制用于有效地協調各個部分的工作。
  J2EE為我們提供了JMS和消息驅動Bean(Message-Driven Bean),用來實現應用程序各個部件之間的異步消息傳遞。
  一.什么是消息系統?
  通常一個消息系統答應分開的未耦合的應用程序之間可靠地異步通信。在企業應用時,需要一種異步的,非阻塞的消息傳遞。比如,一個客戶端可能希望給一個服務器發送一個請求后,不在乎是否馬上能得到回應。這樣,客戶端沒有理由必須等待服務器處理請求??蛻舳藨贸绦蛟谶f交一個請求之后,只需確保請求到達服務器端后,就可以處理其他任務。通常,這是很高效的。消息系統提供了許多其他分布式對象計算模型沒有的優點。它鼓勵在消息產生者和使用者之間的"松耦合",在它們之間有很高程度的事務處理。對于使用者,它不在乎誰產生了消息,產生者是否仍在網絡上以及消息是什么時候產生的。這就答應建立動態的,可靠的和靈活的系統。整個的子系統能被修改而不會影響系統的其他部分。
  另外的優點包括:系統的高度可擴展性,輕易與其他系統進行集成,以及高度的可靠性。由于可靠性和可擴展性,使得它們用于解決許多商業和科學計算問題。比如,消息系統是許多應用程序的基礎,這些應用程序可以是工作流,網絡治理,通信服務或供給鏈治理程序。在java技術中,處理異步消息的能力是通過JMS來實現的。JMS最初設計是為了給傳統的消息對象中間件提供一個標準的JAVA接口。而這些產品是在一個企業級應用程序中必須的?,F在出現了許多支持JMS的純JAVA的產品。
  消息系統類型
  通常有兩種消息類型。
  1.發布/訂閱(publish/subscribe)
  發布/訂閱消息系統支持一個事件驅動模型,消息產生者和使用者都參與消息的傳遞。產生者發布事件,而使用者訂閱感愛好的事件,并使用事件。產生者將消息和一個特定的主題(Topic)連在一起,消息系統根據使用者注冊的愛好,將消息傳給使用者。
  2.點對點(Peer to peer)
  在點對點的消息系統中,消息分發給一個單獨的使用者。它維持一個"進入"消息隊列。消息應用程序發送消息到一個特定的隊列,而客戶端從一個隊列中得到消息。
  二.JMS簡介
  JMS的目的是提供給消息系統客戶一個固定的接口,而且與底層的消息提供者無關。這樣,客戶端的應用程序可以在不同的機器和操作系統中移植,而且能在不同的消息系統產品之間轉移。JMS客戶端都是建立在JAVA技術上的,從而也能使用其他JAVA API,如JDBC數據庫連接,使用JAVA BEAN組件模型,JDNI名字服務,JTA客戶端事務處理控制以及J2SE和J2EE API來實現企業級應用服務程序。
  1.JMS對象模型
   J2EE的異步消息機制(圖一)
  圖1顯示了JMS對象,用于提供JMS客戶端與JMS服務提供者相連的對象。
  ConnectionFactory是一個客戶端用來創建一個Connection的治理對象。由于在Connection創建時有授權和通信建立過程,因此這個對象是比較大的。
  Destination對象將一個消息的目的和服務提供者有關的地址及配置信息包裝起來。
  session是JMS實體,用來支持事務處理和異步消息消費。JMS并不需要客戶端的代碼用于異步消息消費或能處理多個并發消息。通常,事務的復雜性都由一個Session來封裝。
  一個Session是一個原子單位的工作,與數據庫的事務一樣,要實現多線程事務比較困難。Session提供了在一個線程編程模式下的并發的優點。
  MessagePRodUCer和MessageConsumer對象由Session對象創建。用于發送和接受消息。為了確保消息的傳遞,JMS服務提供者處理的消息都要處于PERSISTENT模式。PERSISTENT模式使得JMS提供者出問題后,也能讓消息保存下來。
  Session,MessageProducer和MessageConsumer都不支持并發,而ConnectionFactory,Destination和Connection都支持并發。
  2.JMS應用程序開發
  JMS中的消息
  在消息系統中,應用程序之間通信的要害是消息。因此使用JMS必須要先理解消息。
  在JMS中,消息由三部分組成:
  MESSAGE HEADER用于識別消息,比如用于判定一個給定的消息是否是一個"訂閱者"
  PROPERITIES用于與應用程序相關的,提供者相關的和可選項的信息
  BODY是消息的內容,支持幾種格式,包括TextMessage(對String一個簡單的封裝)和ObjectMessage(對任意對象的封裝,但必須支持序列化),也支持其他格式。
  TextMessage
  一個TextMessage是一個String對象的封裝。在只有文本對象傳遞時,是很有用的。它假設許多消息系統是建立在xml上的。從而TextMessage就可以成為包裝它們的容器。
  創建一個TextMessage對象很簡單,如下面的代碼:
  TextMessage message=session.createMessage();
  message.setText("Hello, world!");
  ObjectMessage
  如名字所示,它是對一個JAVA對象的封裝的消息。任何可序列化的JAVA對象都能用于ObjectMessage,假如必須將多個對象封裝在一個消息里傳遞,可以使用Collection對象,來包括多個序列化對象。
  下面是創建一個ObjectMessage
  ObjectMessage message=session.createObjectMessage();
  message.setObject(myObject);
  創建一個JMS客戶端程序
  一個典型的JMS客戶端由下面的幾個基本步驟來創建:
  創建一個到消息系統提供者的連接(Connection)
  創建一個Session,用于接收和發送消息
  創建MessageProducer和MessageConsumer來創建和接收消息
  當完成了上述步驟后,一個消息產生者客戶端將創建并發布消息到一個主題,而消息使用者客戶端會接收與一個主題相關的消息。
  1.創建一個Connection
  一個Connection提供客戶端對底層的消息系統的訪問。并實現資源的分配和治理。通過使用一個ConnectionFactory來創建一個Connection,通常用JDNI來指定:
   J2EE的異步消息機制(圖二)
  2.創建一個Session
  Session是一個比較大的JMS對象,他提供了生產和消費消息的手段。用于創建消息使用者和消息產生者。
  topicSession = topicConnection.createTopicSession(false,Session.AUTO_ACKNOWLEDGE);
  兩個參數用于控制事務和消息確認。
  3.定位一個Topic
  用JDNI來定位一個Topic,Topic用于識別發送或接收的消息,在發布/訂閱系統中。訂閱者訂閱一個給定的Topic,而發布者將它發布的消息與一個Topic相連。
  下面是創建一個Topic "WeatherReport"
  Topic weatherTopic=messaging.lookup("WeatherReport");
  4.啟動Connection
  在上面的初始化步驟之后,消息流是禁止的,用于防止在初始化時發生不可預料的行為。一旦初始化結束,必須讓Connection啟動消息系統。
  topicConnection.start();
  5.創建一個消息產生者
  在發布/訂閱里,一個產生者發布消息到一個指定的Topic。下面的代碼顯示創建一個產生者,以及后續的建立和發布一個簡單文本消息。
  TopicPublisher publisher=session.createPublisher(weatherTopic);
  TexeMessage message=session.createMessage();
  message.setText("ssss");
  publisher.publish(message);
  下面是一個消息使用者的代碼
  J2EE的異步消息機制(圖三)
  三.消息驅動Bean簡介
  異步消息也可以由消息驅動Bean來實現。在EJB 1.1規范中,定義了兩種類型的EJB。分別是實體Bean(Entity Bean)和會話Bean(Session Bean)??蛻舳送ǔJ且酝降?,阻塞方式來調用Bean的方法。消息驅動Bean將EJB和JMS的功能結合在一起。
  正如前述,會話Bean通常實現商務邏輯,客戶端不能共享一個會話Bean。實體Bean通常和一些在永久存儲中的一些實體條目相對應的。這兩種Bean通常都有REMOTE和HOME接口,用來與客戶端交互。并且,這些交互都是同步的,阻塞方式進行的。比如,一個請求發送給一個Bean,通過阻塞式方法調用,服務器返回一個相應。調用者在收到返回后,才能進行下一步處理。消息驅動Bean通常配置成是一個非凡的主題(topic)或隊列的客戶端,作為消息的使用者。但消息驅動Bean沒有HOME和REMOTE接口。一個消息產生者將消息寫入TOPIC或隊列時,并不知道使用者是一個消息驅動Bean。這就答應集成一個分布式的計算系統時,有很大的靈活性。消息驅動Bean沒有會話性質的狀態,所有的實例在不處理請求時是相同的,這與無狀態會話Bean是類似的。將Bean的實例放在緩沖池里,也是高效處理消息驅動Bean的一種方法。一個消息驅動Bean必須間接或直接地從javax.ejb.MessageDrivenBean接口繼續而來。這個接口是由javax.jms.MessageListener繼續而來。這個方法的一個參數是javax.jms.Message??梢允侨魏斡行У腏MS消息類型。方法的申明中并不包含一個thrown語句。因此在消息處理中,不會仍出應用程序異常。當容器接收到消息時,它首先是從一個緩沖池里得到現成的一個消息驅動Bean,然后,假如配置文件需要的,容器還要設置一個和事務處理上下文的一個聯系。當這些治理任務完成時,接收到的消息傳遞給onMessage()方法。一旦方法完成,事務確認或返回,Bean又被重新放回到緩沖池。
  ejbRemove()在把消息驅動Bean從任何存儲上刪除時調用。并進行清楚操作和垃圾收集。必須在ejbRemove()方法中釋放所有Bean的實例用到的資源。
  setMessageDri

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
午夜精品久久久久久久白皮肤| 国产精品自产拍高潮在线观看| 91高清在线免费观看| 欧美小视频在线| 午夜精品久久久久久久99热浪潮| 日本精品中文字幕| 久久久视频精品| 日韩免费看的电影电视剧大全| 91高清视频在线免费观看| xvideos成人免费中文版| 亚洲深夜福利在线| 国产精品私拍pans大尺度在线| 日韩av三级在线观看| 色妞色视频一区二区三区四区| 8090成年在线看片午夜| 92看片淫黄大片看国产片| 96国产粉嫩美女| 国产精品久久久久久久天堂| 国产在线观看一区二区三区| 亚洲天天在线日亚洲洲精| 日韩视频免费观看| 久久精品国产欧美亚洲人人爽| 尤物yw午夜国产精品视频明星| 亚洲国产成人91精品| 日韩精品在线看| 日韩美女福利视频| 国产99久久精品一区二区永久免费| 91久久精品久久国产性色也91| 欧美区二区三区| 亚洲欧美中文字幕| 亚洲欧美激情另类校园| 欧美日韩另类字幕中文| 日韩激情第一页| 中文在线不卡视频| 国产人妖伪娘一区91| 欧美—级高清免费播放| 日韩中文字幕国产| 欧美色视频日本高清在线观看| 欧美中在线观看| 亚洲a区在线视频| 一本色道久久综合狠狠躁篇怎么玩| 欧美极品在线视频| 深夜福利一区二区| 国产精品网红直播| 亚洲电影第1页| 亚洲成人网久久久| 国产亚洲精品va在线观看| 精品免费在线观看| 国产精品爱啪在线线免费观看| 亚洲视频一区二区三区| 欧美精品在线极品| 亚洲bt天天射| 欧美激情高清视频| 亚洲第一国产精品| 欧美电影在线播放| 日韩精品在线影院| 亚洲一区二区三区成人在线视频精品| 精品亚洲一区二区三区在线播放| 国产国语刺激对白av不卡| 国产视频999| 91亚洲精品在线| 国产ts人妖一区二区三区| 亚洲欧美精品一区二区| 欧美电影《睫毛膏》| 国产成人精品久久二区二区| 成人免费看吃奶视频网站| 国产一区二区三区视频免费| 一区二区中文字幕| 国产精品成人av在线| 欧美日韩亚洲视频| 国产69精品久久久久9999| 久久中文精品视频| 日韩午夜在线视频| 亚洲国产精品yw在线观看| 国产va免费精品高清在线| 欧美诱惑福利视频| 日韩av在线电影网| 成人免费视频97| 成人激情视频在线观看| 亚洲的天堂在线中文字幕| 欧美精品18videos性欧| 亚洲国产精品va在看黑人| 亚洲人成毛片在线播放| 亚洲第一在线视频| 亚洲精品一区久久久久久| 欧美黑人xxxⅹ高潮交| 日韩国产高清视频在线| 不卡av电影在线观看| 亚洲成人教育av| 国产欧美日韩高清| 亚洲福利视频专区| 川上优av一区二区线观看| 国产成人综合久久| 国产一区二区色| 亚洲午夜未满十八勿入免费观看全集| 亚洲国产精彩中文乱码av| 国产精品入口夜色视频大尺度| 红桃av永久久久| 国内精品久久久久久影视8| 欧美一区第一页| 亚洲国产精品人人爽夜夜爽| 欧美另类在线播放| 日韩av成人在线观看| 中文日韩在线观看| 欧美福利在线观看| 日韩风俗一区 二区| 欧美性猛交xxxx乱大交3| 中文字幕在线看视频国产欧美| 日韩欧美极品在线观看| 欧美成aaa人片在线观看蜜臀| 亚洲网站在线播放| 国产精品白嫩美女在线观看| 97在线视频一区| 欧美精品成人91久久久久久久| 色吧影院999| 久久人人爽国产| 97国产真实伦对白精彩视频8| 51色欧美片视频在线观看| 久久精品视频亚洲| 欧美伦理91i| 成人xxxxx| 国产美女久久精品香蕉69| 色偷偷偷综合中文字幕;dd| 91免费福利视频| 欧美久久精品午夜青青大伊人| 中文字幕日韩av综合精品| 中文字幕无线精品亚洲乱码一区| 亚洲色图综合网| 欧美福利视频在线观看| 欧美性开放视频| 久久精品视频在线| 日韩欧美在线字幕| 亚洲综合精品伊人久久| 日韩高清电影免费观看完整版| x99av成人免费| 精品国产欧美一区二区五十路| 欧美成人精品不卡视频在线观看| 亚洲女人天堂成人av在线| 国产视频丨精品|在线观看| 俺去啦;欧美日韩| 日韩电影中文字幕在线观看| 555www成人网| 久久精品夜夜夜夜夜久久| 欧美成人精品在线视频| 国产亚洲欧美日韩精品| 欧美最猛性xxxxx免费| 亚洲精品按摩视频| 成人观看高清在线观看免费| 96pao国产成视频永久免费| 欧美噜噜久久久xxx| 88国产精品欧美一区二区三区| 中文字幕亚洲无线码在线一区| 国产a∨精品一区二区三区不卡| 久久人人看视频| 亚洲自拍中文字幕| 91久久久久久久一区二区| 亚洲毛片在线免费观看| 日韩毛片在线观看| 亚洲精品免费在线视频| 欧美精品免费播放| 亚洲色图偷窥自拍| 久久免费高清视频| 国产成人亚洲精品| 国产欧美日韩亚洲精品|