一、概述
·jms是用於面向訊息的中介軟體相互通訊的應用程式介面(api)
·既支援點對點(p2p)的域,也支援發布/訂閱(publish/subscibe)型別的域
·提供兩大功能:訊息生產和訊息消費
·jms提供的訊息服務包括兩種機制:
1、p2p 單個消費者消費掉(queue佇列)
client1傳送訊息給訊息服務中的乙個佇列,而client2則從這個佇列中取出訊息
2、發布/訂閱 為持久地訂閱者則會儲存到mq並處於監聽狀態(topic主題)
類似於廣播,client1向伺服器中的乙個訊息主題傳送訊息,對於這個訊息主題感興趣的客戶端可以預約這個訊息主題,當主題存在資料時,所以預約過這個主題的客戶端都會接收到。
·sun兩個jms的版本:1.02版本 queueconnectionfactory topicconnectionfactory
1.1版本,統一成為connectionfactory
二、概念
·destination 目的地 用來表示這些管理物件的抽象目的地資源
·session 會話 乙個會話物件是乙個單執行緒的上下文物件,用於產生訊息和消費訊息,是jvm向外提供的資源,也是乙個jms物件,它既是產生訊息生產者和消費者的工廠,也是建立主題訊息物件和點對點訊息物件的工廠
topicpublisher publisher = session.createpublisher(topic);
topicsubscriber subscriber = session.createsubscriber(topic);
queuesender sender = session.createsender(queue);
queuereceiver receiver = session.createreceiver(queue);
textmessage msg = publisher.session.createtextmessage();
textmessage msg = sender.session.createtextmessage();
·connection 乙個連線物件是由客戶端啟用的客戶端與服務提供者之間的連線
·message訊息 服務提供者與客戶端之間傳遞資訊所使用的資訊單元,
·messageproducer 訊息生產者 訊息產生由jms客戶端完成,服務提供者只負責管理這些訊息,通過publish(message msg)和send(message msg)完成
·messageconsumer 訊息消費者 接收來自某個佇列的訊息 通過 message receiver()來接收
三、jms使用步驟(9個步驟)
由jndi發現connectionfactory,然後建立乙個連線例項(connection),由connection建立乙個session,然後由session建立訊息生產者(producer),也可以建立訊息消費者(consumer),無論生產者還是消費者都需要訪問jms的目標物件(destination)。當然在使用消費方式時,可以建立訊息的監聽者(listener),當產生乙個訊息時,監聽者會得到通知。
步驟1:建立jndi上下文,並找到建立jms的工廠類
hashtable env = new hashtable();
env.put(context.initial_context_factory,"org.jnp.inte***ces.namingcontextfactory");
env.put(context.provider_url,"ldap:");
context inictx = new initialcontext(env);
topicconnectionfactory tcf = (topicconnectionfactory)inictx.lookup("connectionfactory");
步驟2:查詢jms的目標物件
topic topic = (topic)inictx.lookup("topic/testtopic");
步驟3:建立jms
topicconnection conn = tcf.createtopicconnection();//只要在這裡加入user,pwd引數,該訊息為永續性訊息
步驟4:建立會話
topicsession session = conn.createtopicsession(false,session.auto_acknowledge);
步驟5:建立訊息的生產者和消費者
topicpublisher publisher = session.createpublisher(topic);
topicsubscriber subscriber = session.createsubscriber(topic);
步驟6:註冊訊息監聽者
textlistener listener = new textlistener();
subscriber.setmessagelistener(listener);
步驟7:開始jms的連線
conn.start();
步驟8:傳送和接收訊息
publisher.publish(message message);
message message = subscriber.receive();
步驟9:停止和關閉jms連線
conn.stop();
session.close();
conn.close();
-----------------------spring 封裝jms----------------------------
spring 中對jms進行了封裝,另使用編寫變得更簡單.對於1.1的jms其有jmstemplate,而對於1.02其有jmstemplate102
而spring中的jms對於queue和topic方式並不關心,都整合到一起用了!!
這裡的jmstemp需要指定 connectionfactory(org.springframework.jndi.jndiobjectfactorybean)和 defaultdestination(org.springframework.jndi.jndiobjectfactorybean) 注意 1.02中必須要設定pubsubdomain屬性,是否以主題形式傳送
jms傳送方法
jmstemplate.send(new messagecreator() catch (jm***ception e) {
pw.println(e);
pw.println("");
pw.println("");
5. 在jboss的deploy/jms目錄下建立sc-jms-service.xml
<?xml version="1.0" encoding="utf-8"?>
name="jboss.mq.destination:service=topic,name=somcjms">
jboss.mq:service=destinationmanager
jboss.mq:service=securitymanager
6. 將工程達成war包直接放到jboss的deploy目錄下即可,然後啟動jboss訪問jmstest這個servlet,你會在控制台看到接受到的訊息,至此,乙個最簡單的jms例項完成了
JMS學習筆記(四) JMS開發步驟
1.jms開發步驟 乙個jms 應用是幾個 jms 客戶端交換訊息,開發 jms客戶端應用由以下幾步構成 1 用jndi 得到connectionfactory 物件 2 用connectionfactory 建立connection 物件 3 用connection 物件建立乙個或多個 jms s...
JMS學習筆記(二) JMS介面描述
1.jms介面描述 jms 支援兩種訊息型別ptp 和pub sub,分別稱作 ptp domain 和pub sub domain,這兩種介面都繼承統一的jms parent 介面,jms 主要介面如下所示 1 connectionfactory 是客戶機用來建立與jms提供者的鏈結的物件。它是受...
JMS學習筆記(三)
在這一節中,我著重介紹一下jms1.1中的公共介面,以及該介面下的重要方法 connectionfactory connectionfactory 是乙個可以從 jndi 檢索的受管理物件,它建立了到提供者的連線。它包含 createconnection 方法,該方法返回了乙個 connection...