成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

JMS機(jī)制

Hegel_Gu / 2187人閱讀

摘要:多個(gè)發(fā)布者將消息發(fā)送到系統(tǒng)將這些消息傳遞給多個(gè)訂閱者。發(fā)送消息目的地目的地指明消息被發(fā)送的目的地以及客戶(hù)端接收消息的來(lái)源。消息生產(chǎn)者消息生產(chǎn)者由創(chuàng)建,用于往目的地發(fā)送消息。

簡(jiǎn)介:

JMS(JAVA Message Service,java消息服務(wù))API是一個(gè)消息服務(wù)的標(biāo)準(zhǔn)或者說(shuō)是規(guī)范,允許應(yīng)用程序組件基于JavaEE平臺(tái)創(chuàng)建、發(fā)送、接收和讀取消息。它使分布式通信耦合度更低,消息服務(wù)更加可靠以及異步性。

基本概念:

JMS是java的消息服務(wù),JMS的客戶(hù)端之間可以通過(guò)JMS服務(wù)進(jìn)行異步的消息傳輸。JMS保證消息只會(huì)遞送一次。大家都遇到過(guò)重復(fù)創(chuàng)建消息問(wèn)題,而JMS能幫你避免該問(wèn)題。

消息模型:

Point-to-Point(P2P)
Publish/Subscribe(Pub/Sub)
即點(diǎn)對(duì)點(diǎn)和發(fā)布訂閱模型

P2P模式

每個(gè)消息都被發(fā)送到一個(gè)特定的隊(duì)列,接收者從隊(duì)列中獲取消息。隊(duì)列保留著消息,直到他們被消費(fèi)或超時(shí)。
特點(diǎn)是:
1.每個(gè)消息只有一個(gè)消費(fèi)者(Consumer)(即一旦被消費(fèi),消息就不再在消息隊(duì)列中)。
2.發(fā)送者和接收者之間在時(shí)間上沒(méi)有依賴(lài)性,也就是說(shuō)當(dāng)發(fā)送者發(fā)送了消息之后,不管接收者有沒(méi)有正在運(yùn)行,它不會(huì)影響到消息被發(fā)送到隊(duì)列。
3.接收者在成功接收消息之后需向隊(duì)列應(yīng)答成功。

Pub/Sub模式

客戶(hù)端將消息發(fā)送到主題。多個(gè)發(fā)布者將消息發(fā)送到Topic,系統(tǒng)將這些消息傳遞給多個(gè)訂閱者。
特點(diǎn)是:
1.每個(gè)消息可以有多個(gè)消費(fèi)者。
2.發(fā)布者和訂閱者之間有時(shí)間上的依賴(lài)性。針對(duì)某個(gè)主題(Topic)的訂閱者,它必須創(chuàng)建一個(gè)訂閱者之后,才能消費(fèi)發(fā)布者的消息,而且為了消費(fèi)消息,訂閱者必須保持運(yùn)行的狀態(tài)。
3.為了緩和這樣嚴(yán)格的時(shí)間相關(guān)性,JMS允許訂閱者創(chuàng)建一個(gè)可持久化的訂閱。這樣,即使訂閱者沒(méi)有被激活(運(yùn)行),它也能接收到發(fā)布者的消息。

消息的消費(fèi) 

在JMS中,消息的產(chǎn)生和消費(fèi)是異步的。對(duì)于消費(fèi)來(lái)說(shuō),JMS的消息者可以通過(guò)兩種方式來(lái)消費(fèi)消息。
同步:接收者調(diào)用receive方法來(lái)接收消息,receive方法在能夠接收到消息之前(或超時(shí)之前)將一直阻塞
異步:接收者可以注冊(cè)為一個(gè)消息監(jiān)聽(tīng)器。當(dāng)消息到達(dá)之后,系統(tǒng)自動(dòng)調(diào)用監(jiān)聽(tīng)器的onMessage方法。

JMS編程接口

1.管理對(duì)象(Administered objects)-連接工廠(Connection Factories)和目的地(Destination)
2.連接對(duì)象(Connections)
3.會(huì)話(Sessions)
4.消息生產(chǎn)者(Message Producers)
5.消息消費(fèi)者(Message Consumers)
6.消息監(jiān)聽(tīng)者(Message Listeners)

JMS管理對(duì)象

管理對(duì)象(Administered objects)是預(yù)先配置的JMS對(duì)象,由系統(tǒng)管理員為使用JMS的客戶(hù)端創(chuàng)建,主要有兩個(gè)被管理的對(duì)象:
連接工廠(ConnectionFactory),目的地(Destination)。
這兩個(gè)管理對(duì)象由JMS系統(tǒng)管理員通過(guò)使用Application Server管理控制臺(tái)創(chuàng)建,存儲(chǔ)在應(yīng)用程序服務(wù)器的JNDI名字空間或JNDI注冊(cè)表。

連接工廠(ConnectionFactory)

客戶(hù)端使用一個(gè)連接工廠對(duì)象連接到JMS服務(wù)提供者,它創(chuàng)建了JMS服務(wù)提供者和客戶(hù)端之間的連接。JMS客戶(hù)端(如發(fā)送者或接受者)會(huì)在JNDI名字空間中搜索并獲取該連接。使用該連接,客戶(hù)端能夠與目的地通訊,往隊(duì)列或話題發(fā)送/接收消息。
發(fā)送消息:

QueueConnectionFactory queueConnFactory = (QueueConnectionFactory) initialCtx.lookup ("primaryQCF");
Queue purchaseQueue = (Queue) initialCtx.lookup ("Purchase_Queue");
Queue returnQueue = (Queue) initialCtx.lookup ("Return_Queue");
目的地(Destination)

目的地指明消息被發(fā)送的目的地以及客戶(hù)端接收消息的來(lái)源。
創(chuàng)建一個(gè)隊(duì)列Session:

QueueSession ses = con.createQueueSession (false, Session.AUTO_ACKNOWLEDGE);  //get the Queue object  
Queue t = (Queue) ctx.lookup ("myQueue");  //create QueueReceiver  
QueueReceiver receiver = ses.createReceiver(t); 

創(chuàng)建一個(gè)話題Session:

TopicSession ses = con.createTopicSession (false, Session.AUTO_ACKNOWLEDGE); // get the Topic object  
Topic t = (Topic) ctx.lookup ("myTopic");    
TopicSubscriber receiver = ses.createSubscriber(t);
JMS連接

連接對(duì)象封裝了與JMS提供者之間的虛擬連接,如果我們有一個(gè)ConnectionFactory對(duì)象,可以使用它來(lái)創(chuàng)建一個(gè)連接。

Connection connection = connectionFactory.createConnection();
JMS 會(huì)話(Session)

Session是一個(gè)單線程上下文,用于生產(chǎn)和消費(fèi)消息,可以創(chuàng)建出消息生產(chǎn)者和消息消費(fèi)者。
Session對(duì)象實(shí)現(xiàn)了Session接口,在創(chuàng)建完連接后,我們可以使用它創(chuàng)建Session。

Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
JMS消息生產(chǎn)者

消息生產(chǎn)者由Session創(chuàng)建,用于往目的地發(fā)送消息。生產(chǎn)者實(shí)現(xiàn)MessageProducer接口,我們可以為目的地、隊(duì)列或話題創(chuàng)建生產(chǎn)者;

MessageProducer producer = session.createProducer(dest);
MessageProducer producer = session.createProducer(queue);
MessageProducer producer = session.createProducer(topic);

創(chuàng)建完消息生產(chǎn)者后,可以使用send方法發(fā)送消息:

producer.send(message);
JMS消息消費(fèi)者

消息消費(fèi)者由Session創(chuàng)建,用于接受目的地發(fā)送的消息。消費(fèi)者實(shí)現(xiàn)MessageConsumer接口,,我們可以為目的地、隊(duì)列或話題創(chuàng)建消費(fèi)者;

MessageConsumer consumer = session.createConsumer(dest);
MessageConsumer consumer = session.createConsumer(queue);
MessageConsumer consumer = session.createConsumer(topic);
JMS消息監(jiān)聽(tīng)器

JMS消息監(jiān)聽(tīng)器是消息的默認(rèn)事件處理者,他實(shí)現(xiàn)了MessageListener接口,該接口包含一個(gè)onMessage方法,在該方法中需要定義消息達(dá)到后的具體動(dòng)作。通過(guò)調(diào)用setMessageListener方法我們給指定消費(fèi)者定義了消息監(jiān)聽(tīng)器。

Listener myListener = new Listener();
consumer.setMessageListener(myListener);

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/66485.html

相關(guān)文章

  • Java 遠(yuǎn)程通訊技術(shù)及原理分析

    摘要:對(duì)于與而言,則可以看做是消息傳遞技術(shù)的一種衍生或封裝。在生產(chǎn)者通知消費(fèi)者時(shí),傳遞的往往是消息或事件,而非生產(chǎn)者自身。通過(guò)消息路由,我們可以配置路由規(guī)則指定消息傳遞的路徑,以及指定具體的消費(fèi)者消費(fèi)對(duì)應(yīng)的生產(chǎn)者。采用和來(lái)進(jìn)行遠(yuǎn)程對(duì)象的通訊。 消息模式 歸根結(jié)底,企業(yè)應(yīng)用系統(tǒng)就是對(duì)數(shù)據(jù)的處理,而對(duì)于一個(gè)擁有多個(gè)子系統(tǒng)的企業(yè)應(yīng)用系統(tǒng)而言,它的基礎(chǔ)支撐無(wú)疑就是對(duì)消息的處理。與對(duì)象不同,消息本質(zhì)上...

    rozbo 評(píng)論0 收藏0
  • 分布式服務(wù)框架之遠(yuǎn)程通訊技術(shù)及原理分析

    摘要:微軟的雖然引入了事件機(jī)制,可以在隊(duì)列收到消息時(shí)觸發(fā)事件,通知訂閱者。由微軟作為主要貢獻(xiàn)者的,則對(duì)以及做了進(jìn)一層包裝,并能夠很好地實(shí)現(xiàn)這一模式。 在分布式服務(wù)框架中,一個(gè)最基礎(chǔ)的問(wèn)題就是遠(yuǎn)程服務(wù)是怎么通訊的,在Java領(lǐng)域中有很多可實(shí)現(xiàn)遠(yuǎn)程通訊的技術(shù),例如:RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS等,這些名詞之間到底是些什么關(guān)系呢,它們背后到底是基...

    sorra 評(píng)論0 收藏0
  • 分布式服務(wù)框架之遠(yuǎn)程通訊技術(shù)及原理分析

    摘要:微軟的雖然引入了事件機(jī)制,可以在隊(duì)列收到消息時(shí)觸發(fā)事件,通知訂閱者。由微軟作為主要貢獻(xiàn)者的,則對(duì)以及做了進(jìn)一層包裝,并能夠很好地實(shí)現(xiàn)這一模式。 在分布式服務(wù)框架中,一個(gè)最基礎(chǔ)的問(wèn)題就是遠(yuǎn)程服務(wù)是怎么通訊的,在Java領(lǐng)域中有很多可實(shí)現(xiàn)遠(yuǎn)程通訊的技術(shù),例如:RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS等,這些名詞之間到底是些什么關(guān)系呢,它們背后到底是基...

    0xE7A38A 評(píng)論0 收藏0
  • 慕課網(wǎng)_《Java消息中間件》學(xué)習(xí)總結(jié)

    摘要:時(shí)間年月日星期六說(shuō)明本文部分內(nèi)容均來(lái)自慕課網(wǎng)。這個(gè)時(shí)候,可以啟動(dòng)多臺(tái)積分系統(tǒng),來(lái)同時(shí)消費(fèi)這個(gè)消息中間件里面的登錄消息,達(dá)到橫向擴(kuò)展的作用。 時(shí)間:2017年07月22日星期六說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)源碼:無(wú)學(xué)習(xí)源碼:https://github.com/zccodere/s... 第一章:課程介紹 1-1 課程安排 Java...

    twohappy 評(píng)論0 收藏0
  • 基于JMS(Java Message Service)的消息中間件----ActiveMQ

    摘要:而中的消息中間件則是在常見(jiàn)的消息中間件類(lèi)型無(wú)疑是不錯(cuò)的選擇。是在之間傳遞的消息的對(duì)象。基本功能是用于和面向消息的中間件相互通信的應(yīng)用程序接口。支持兩種消息發(fā)送和接收模型。一種稱(chēng)為模型,即采用點(diǎn)對(duì)點(diǎn)的方式發(fā)送消息。 消息中間件利用高效可靠的消息傳遞機(jī)制進(jìn)行平臺(tái)無(wú)關(guān)的數(shù)據(jù)交流,并基于數(shù)據(jù)通信來(lái)進(jìn)行分布式系統(tǒng)的集成。通過(guò)提供消息傳遞和消息排隊(duì)模型,它可以在分布式環(huán)境下擴(kuò)展進(jìn)程間的通信。而Ja...

    JessYanCoding 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<