




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、OpenJMS 是一個(gè)開(kāi)源的 Java Message Service API 1.0.2 規(guī)范的實(shí)現(xiàn) , 它包含有以下特 性:*. 它既支持點(diǎn)到點(diǎn)(point-to-point (PTP 模型和發(fā)布 /訂閱(Pub/Sub模型。 *. 支持同步與異步消息發(fā)送*. JDBC持久性管理使用數(shù)據(jù)庫(kù)表來(lái)存儲(chǔ)消息*. 可視化管理界面。*. Applet支持。*. 能夠與 Jakarta Tomcat這樣的 Servlet 容器結(jié)合。*. 支持 RMI, TCP, HTTP 與 SSL 協(xié)議。*. 客戶端驗(yàn)證*. 提供可靠消息傳輸、事務(wù)和消息過(guò)濾介紹服務(wù)器搭建,在 openJms , 解壓后可以直接使用
2、, 在 openjms-0.7.7-beta-1bin 里, 有 openJms 的運(yùn)行腳本, 執(zhí)行 startup 啟動(dòng), 彈出一個(gè)新的窗口, 服務(wù)就運(yùn)行在新窗口內(nèi), shutdown 為停止命令:服務(wù)運(yùn)行后, 就可以開(kāi)始使用 JMS 服務(wù)了, 至此服務(wù)搭建完畢, 簡(jiǎn)單得不能再簡(jiǎn) 單了。下 面 是 消 息 發(fā) 送 和 接 收 的 開(kāi) 發(fā) , 開(kāi) 發(fā) 中 需 要 的 jar 包 在 openjms-0.7.7-beta-1lib里可以找到:把上面的類包加入到項(xiàng)目中,下面是消息發(fā)送服務(wù)的代碼:/* author qianli 2011-12-26* For openJms 演示 , Messag
3、e 發(fā)送*/public class QueueSend public static void main(String args try /取得 JNDI 上下文和連接Hashtable properties = new Hashtable(;properties.put(Context.INITIAL_CONTEXT_FACTORY,"org.exolab.jms.jndi.InitialContextFactory"/openJms默認(rèn)的端口是 1099properties.put(Context.PROVIDER_URL,"rmi:/localhost:10
4、99/"Context context = new InitialContext(properties;/獲得 JMS 信息連接隊(duì)列工廠QueueConnectionFactory queueConnectionFactory =(QueueConnectionFactory context.lookup("JmsQueueConnectionFactory"/獲得 JMS 信息連接隊(duì)列QueueConnection queueConnection =queueConnectionFactory.createQueueConnection(;/產(chǎn)生隊(duì)列 Sessi
5、on ,設(shè)置事務(wù)為 false ,自動(dòng)應(yīng)答消息接收 QueueSession queueSession =queueConnection.createQueueSession(false,Session.AUTO_ACKNOWLEDGE;/獲得默認(rèn)內(nèi)建在 JMS 里的隊(duì)列之一:queue1Queue queue = (Queue context.lookup("queue1"/產(chǎn)生 JMS 隊(duì)列發(fā)送器QueueSender queueSender =queueSession.createSender(queue;/發(fā)送數(shù)據(jù)到 JMSUserBean ub = new Use
6、rBean(;ub.setUsername("weida"ub.setPassword("111"ObjectMessage message = queueSession.createObjectMessage(ub;queueSender.send(message;System.out.println("信息寫(xiě)入 JMS 服務(wù)器隊(duì)列 "/以下做清除工作,代碼略/ . . catch (Exception e e.printStackTrace(;/* author qianli 2011-12-26* For openJms 演示
7、, 同步接收 Message*/public class QueueReceiveSynchronous public static void main(String args try /取得 JNDI 上下文和連接Hashtable properties = new Hashtable(;properties.put(Context.INITIAL_CONTEXT_FACTORY,"org.exolab.jms.jndi.InitialContextFactory"properties.put(Context.PROVIDER_URL,"rmi:/localho
8、st:1099/"Context context = new InitialContext(properties;/獲得 JMS 信息連接隊(duì)列工廠QueueConnectionFactory queueConnectionFactory =(QueueConnectionFactory context.lookup("JmsQueueConnectionFactory"/獲得 JMS 信息連接隊(duì)列QueueConnection queueConnection =queueConnectionFactory.createQueueConnection(;/啟動(dòng)接收隊(duì)
9、列線程queueConnection.start(;/產(chǎn)生隊(duì)列 Session ,設(shè)置事務(wù)為 false ,自動(dòng)應(yīng)答消息接收 QueueSession queueSession =queueConnection.createQueueSession(false,Session.AUTO_ACKNOWLEDGE;/獲得默認(rèn)內(nèi)建在 JMS 里的隊(duì)列之一:queue1Queue queue = (Queue context.lookup("queue1"/產(chǎn)生 JMS 隊(duì)列接收器QueueReceiver queueReceiver =queueSession.createRec
10、eiver(queue;/通過(guò)同步的方法接收消息Message message = queueReceiver.receive(;UserBean ub = null;if (message instanceof ObjectMessageub = (UserBean(ObjectMessagemessage.getObject(; System.out.println("username="+ub.getUsername(; System.out.println("password="+ub.getPassword(; /以下做清除工作,代碼略/ .
11、. catch (Exception e e.printStackTrace(;/* author qianli 2011-12-26* For openJms 演示 , 非同步接收 Message*/public class QueueReceiveAsynchronous implements MessageListener private UserBean ub = null;QueueReceiveAsynchronous(try /取得 JNDI 上下文和連接Hashtable properties = new Hashtable(;properties.put(Context.IN
12、ITIAL_CONTEXT_FACTORY,"org.exolab.jms.jndi.InitialContextFactory" properties.put(Context.PROVIDER_URL,"rmi:/localhost:1099/"Context context = new InitialContext(properties; /獲得 JMS 信息連接隊(duì)列工廠QueueConnectionFactory queueConnectionFactory =(QueueConnectionFactory context.lookup("
13、;JmsQueueConnectionFactory"/獲得 JMS 信息連接隊(duì)列QueueConnection queueConnection =queueConnectionFactory.createQueueConnection(; /產(chǎn)生隊(duì)列 Session ,設(shè)置事務(wù)為 false ,自動(dòng)應(yīng)答消息接收 QueueSession queueSession =queueConnection.createQueueSession(false,Session.AUTO_ACKNOWLEDGE;/獲得默認(rèn)內(nèi)建在 JMS 里的隊(duì)列之一:queue1Queue queue = (Que
14、ue context.lookup("queue1"/產(chǎn)生 JMS 隊(duì)列接收器QueueReceiver queueReceiver =queueSession.createReceiver(queue;queueReceiver.setMessageListener(this;/啟動(dòng)接收隊(duì)列線程queueConnection.start(; catch (Exception e e.printStackTrace(;public static void main(String args System.out.println("非同步消息的接收:"try
15、 QueueReceiveAsynchronous listener =new QueueReceiveAsynchronous(;Thread.sleep(1000; catch (InterruptedException e e.printStackTrace(;public void onMessage(Message message if (message instanceof ObjectMessagetry ub = (UserBean(ObjectMessagemessage.getObject(; catch (JMSException e e.printStackTrace(
16、;if(ub != nullSystem.out.println("username="+ub.getUsername(; System.out.println("password="+ub.getPassword(; ub = null;/* author qianli 2011-12-26* openJms 訂閱 /發(fā)布模式 發(fā)布*/public class TopicSender private TopicPublisher m_topicPublisher;private TopicSession m_topicSession;private i
17、nt binit = 0;public TopicSender(String strtopic try Hashtable properties = new Hashtable(;properties.put(Context.INITIAL_CONTEXT_FACTORY,"org.exolab.jms.jndi.InitialContextFactory"properties.put(Context.PROVIDER_URL, "rmi:/localhost:1099/" /*properties.put(".https.keyStore&q
18、uot;,"E:worksnote_namesrcclient.keystore"properties.put(".https.keyStorePassword","openjms" properties.put(".https.trustStore", "C:jsdk2jrelibsecuritycacerts" */ Context context = new InitialContext(properties; / 獲得 JMS Topic 連接隊(duì)列工廠 TopicConnectionFa
19、ctory factory = (TopicConnectionFactory context .lookup("JmsTopicConnectionFactory" / 創(chuàng)建一個(gè) Topic 連接,并啟動(dòng) TopicConnection topicConnection factory.createTopicConnection(; topicConnection.start(; / 創(chuàng)建一個(gè) Topic 會(huì)話,并設(shè)置自動(dòng)應(yīng)答 m_topicSession = topicConnection.createTopicSession(false, Session.AUTO_AC
20、KNOWLEDGE; / lookup 得到 topic1 Topic topic = (Topic context.lookup(strtopic; / 用 Topic 會(huì)話生成 Topic 發(fā)布器 m_topicPublisher = m_topicSession.createPublisher(topic; binit = 1; catch (NamingException e e.printStackTrace(; catch (JMSException e e.printStackTrace(; public void Send(String strmsg if (binit = 0
21、 System.out.println("請(qǐng)先初始化 jms" else try TextMessage m_topicSession.createTextMessage(strmsg; m_topicPublisher.publish(message; catch (JMSException e e.printStackTrace(; = message = public static void main(String args TopicSender send = new TopicSender("topic1" send.Send("he
22、llo" /* * author qianli 2011-12-26 * openJms 非持久訂閱同步接收演示 */ public class TopicSubscribeSynchronous public static void main(String args try System.out.println("定購(gòu)消息接收啟動(dòng):" /取得 JNDI 上下文和連接 Hashtable properties = new Hashtable(; properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.ex
23、olab.jms.jndi.InitialContextFactory" properties.put(Context.PROVIDER_URL, "rmi:/localhost:1099/" Context context = new InitialContext(properties; /獲得 Topic 工廠和 Connection TopicConnectionFactory factory = (TopicConnectionFactory context.lookup( "JmsTopicConnectionFactory" Top
24、icConnection topicConnection factory.createTopicConnection(; topicConnection.start(; /創(chuàng)建 Topic 的會(huì)話,用于接收信息 TopicSession topicSession = topicConnection.createTopicSession( false, Session.AUTO_ACKNOWLEDGE; /lookup topic1 Topic topic = (Topic context.lookup("topic1" /創(chuàng)建 Topic subscriber TopicS
25、ubscriber topicSubscriber = topicSession.createSubscriber(topic; /收滿 10 條訂閱消息則退出 for (int i=0; i<10; i+ /同步消息接收,使用 receive 方法,堵塞等待,直到接收消 息 = TextMessage message = (TextMessage topicSubscriber.receive(; System.out.println(" 接 收 訂 閱 消 息 "+i+": " + message.getText(; /資源清除,代碼略 . .
26、 System.out.println("訂閱接收結(jié)束." catch (NamingException e e.printStackTrace(; catch (JMSException e e.printStackTrace(; /* * author qianli 2011-12-26 * openJms 非持久訂閱異步接收演示 */ public class TopicSubscribeAsynchronous implements MessageListener private TopicConnection topicConnection; private To
27、picSession topicSession; private Topic topic; private TopicSubscriber topicSubscriber; TopicSubscribeAsynchronous( try /取得 JNDI 上下文和連接 Hashtable properties = new Hashtable(; properties.put( Context.INITIAL_CONTEXT_FACTORY, "org.exolab.jms.jndi.InitialContextFactory" properties.put(Context.PROVIDER_URL, "rmi:/localhost:1099/" Context context = new InitialContext(properties; /取得 Topic 的連接工廠和連接 TopicConnectionFactory topicConnectionFactory = (TopicConnectionFactory context.lookup( "JmsTopicConnectionFactory"
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)院全套應(yīng)急管理制度
- 2025年春江蘇開(kāi)放大學(xué)民法061115平時(shí)作業(yè)1-3
- 美甲材料采購(gòu)合同
- 短期產(chǎn)品效果分析員協(xié)議
- 非洲文化市場(chǎng)出租協(xié)議
- 監(jiān)測(cè)儀器維保協(xié)議
- 退休程序員返聘合同
- 非正式實(shí)習(xí)生協(xié)議
- 2025至2030年中國(guó)人參養(yǎng)榮丸行業(yè)市場(chǎng)需求分析及投資前景展望報(bào)告
- 2025至2030年中國(guó)2-氨基-4-乙酰氨基苯甲醚行業(yè)市場(chǎng)競(jìng)爭(zhēng)態(tài)勢(shì)及發(fā)展趨向分析報(bào)告
- GB/T 9865.1-1996硫化橡膠或熱塑性橡膠樣品和試樣的制備第一部分:物理試驗(yàn)
- 大一物理實(shí)驗(yàn)報(bào)告 答辯 霍爾效應(yīng)與應(yīng)用設(shè)計(jì)PPT
- 《巡游出租汽車經(jīng)營(yíng)申請(qǐng)表》
- 2023年山東高考英語(yǔ)試題答案及詳細(xì)解析word版
- 《職業(yè)病危害因素分類目錄》(國(guó)衛(wèi)疾控發(fā)〔2015〕92號(hào))
- 特種作業(yè)人員臺(tái)賬及個(gè)人檔案表
- 2022內(nèi)分泌內(nèi)科三基考試題庫(kù)及答案
- 統(tǒng)編人教部編版語(yǔ)文六年級(jí)下冊(cè)期末總復(fù)習(xí)課教學(xué)策略教學(xué)指導(dǎo)教研備課校本培訓(xùn)課件
- 幼兒園復(fù)讀申請(qǐng)書(shū)模板
- 江蘇省建設(shè)工程資料表格(第六版)
- 退教協(xié)工作總結(jié)范文(通用6篇)
評(píng)論
0/150
提交評(píng)論