JMS學習筆記

2021-06-04 16:13:44 字數 3609 閱讀 5602

一、概述

·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...