欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
JMS入門(mén)

文章來(lái)源(IBM中國)

1、介紹

在這一節中,我們將分析兩個(gè)進(jìn)行點(diǎn)對點(diǎn)消息接發(fā)的程序—— QSender.java 和 QReceiver.java。

我們將在一些小節中分析代碼并描述每一小節的功能。

2、QSender:提示輸入 JNDI 名稱(chēng)~

這兩個(gè)示例程序都是命令行程序, 用 System.in 輸入、用 System.out 輸出。 QSender 類(lèi)有兩個(gè)方法:main(String[]) 和 send()。main(String[]) 方法只舉例說(shuō)明了 QSender ,并調用了它的 send() 方法。send() 方法的第一部分提示輸入用來(lái)發(fā)送消息受管理對象的 JNDI 的名稱(chēng)。

  1. import java.io.*;   
  2. import javax.jms.*;   
  3. import javax.naming.*;   
  4.   
  5. public class QSender {   
  6.   
  7.     public static void main(String[] args) {   
  8.   
  9.         new QSender().send();   
  10.     }   
  11.   
  12.     public void send() {   
  13.   
  14.         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));   
  15.   
  16.         try {   
  17.             //Prompt for JNDI names   
  18.             System.out.println("Enter QueueConnectionFactory name:");   
  19.             String factoryName = reader.readLine();   
  20.             System.out.println("Enter Queue name:");   
  21.             String queueName = reader.readLine();   
  22.     . . .  

3、QSender查找管理對象 

send() 方法的第二部分用前面輸入的名字在 JNDI 中查找受管理的對象。通過(guò)舉例說(shuō)明 InitialContext 對象訪(fǎng)問(wèn) JNDI,通過(guò)調用lookup(String) 方法并傳遞要獲取的對象的名字來(lái)檢索受管理的對象。注意, lookup(String) 方法返回的是 Object,所以必須對返回的對象進(jìn)行類(lèi)型強制轉換。


 

  1. . . .   
  2.         //Look up administered objects   
  3.         InitialContext initContext = new InitialContext();   
  4.         QueueConnectionFactory factory =   
  5.             (QueueConnectionFactory) initContext.lookup(factoryName);   
  6.         Queue queue = (Queue) initContext.lookup(queueName);   
  7.         initContext.close();   
  8.         . . .   

4、QSender:創(chuàng )建 JMS 對象

現在,我們已創(chuàng )建了發(fā)送消息所需要的 JMS 對象。注意,我們沒(méi)有用 new 直接舉例說(shuō)明這些對象。所有對象都是通過(guò)調用另一個(gè)對象的方法創(chuàng )建的。
首先,用 QueueConnectionFactory 創(chuàng )建 QueueConnection。然后用 QueueConnection 創(chuàng )建一個(gè) QueueSession。
QueueSession 不是經(jīng)過(guò)處理的(false),并且它將使用自動(dòng)確認 (Session.AUTO_ACKNOWLEDGE)。
最后,創(chuàng )建 QueueSender 將信息發(fā)送到從 JNDI 中檢索的 Queue 發(fā)送消息。

  1. . . .   
  2.         //Create JMS objects   
  3.         QueueConnection connection = factory.createQueueConnection();   
  4.         QueueSession session =   
  5.             connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);   
  6.         QueueSender sender = session.createSender(queue);   
  7.         . . .  

5、QSender:發(fā)送消息

現在就可以發(fā)送消息了。在這一部分中,我們進(jìn)入一個(gè)循環(huán),該循環(huán)提示我們要發(fā)送的消息的文本。如果用戶(hù)輸入 quit,則退出循環(huán)。

否則要在輸入的文本中建立一個(gè) TextMessage ,并用 QueueSender 發(fā)送消息,然后返回循環(huán)的開(kāi)始部分。

  1. . . .   
  2.         //Send messages   
  3.         String messageText = null;   
  4.         while (true) {   
  5.             System.out.println("Enter message to send or ‘quit‘:");   
  6.             messageText = reader.readLine();   
  7.             if ("quit".equals(messageText))   
  8.                 break;   
  9.             TextMessage message = session.createTextMessage(messageText);   
  10.             sender.send(message);   
  11.         }   
  12.         . . .   

 6、QSender:退出

退出循環(huán)后,關(guān)閉 QueueConnection。關(guān)閉 QueueConnection 會(huì )自動(dòng)關(guān)閉 QueueSession 和 QueueSender。

java 代碼
  1. . . .   
  2.         //Exit   
  3.         System.out.println("Exiting...");   
  4.         reader.close();   
  5.         connection.close();   
  6.         System.out.println("Goodbye!");   
  7.   
  8.     } catch (Exception e) {   
  9.         e.printStackTrace();   
  10.         System.exit(1);   
  11.     }   
  12. }   

7、QReceiver提示輸入 JNDI 名稱(chēng)并查找受管理的對象

QReceiver 類(lèi)與 QSender 類(lèi)非常類(lèi)似,都有一個(gè) main(String[]) 方法,它只舉例說(shuō)明 QReceiver 并調用了它的主要方法 receive()。

提示輸入 JNDI 名字并查找受管理對象的代碼與 QSender 中的代碼完全一樣。
不過(guò),在這個(gè)類(lèi)中有兩處不一樣的地方:
boolean stop 實(shí)例變量被用來(lái)指出程序應該退出。
QReceiver 可以實(shí)現 MessageListener 接口來(lái)異步接收消息。

  1. import java.io.*;   
  2. import javax.jms.*;   
  3. import javax.naming.*;   
  4.   
  5. public class QReceiver implements MessageListener {   
  6.   
  7.     private boolean stop = false;   
  8.   
  9.     public static void main(String[] args) {   
  10.   
  11.         new QReceiver().receive();   
  12.     }   
  13.   
  14.     public void receive() {   
  15.   
  16.         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));   
  17.   
  18.         try {   
  19.             //Prompt for JNDI names   
  20.             System.out.println("Enter QueueConnectionFactory name:");   
  21.             String factoryName = reader.readLine();   
  22.             System.out.println("Enter Queue name:");   
  23.             String queueName = reader.readLine();   
  24.             reader.close();   
  25.   
  26.             //Look up administered objects   
  27.             InitialContext initContext = new InitialContext();   
  28.             QueueConnectionFactory factory =   
  29.                 (QueueConnectionFactory) initContext.lookup(factoryName);   
  30.             Queue queue = (Queue) initContext.lookup(queueName);   
  31.             initContext.close();   
  32.             . . .  

 

8、QReceiver:創(chuàng )建 JMS 對象

像在 QSender 中那樣創(chuàng )建 QueueConnection 和 QueueSession,然后創(chuàng )建一個(gè) QueueReceiver。

接著(zhù),調用 setMessageListener(),傳遞 QReceiver 的本地實(shí)例 this,我們將重調它來(lái)實(shí)現 MessageListener 接口。

最后,啟動(dòng) QueueConnection 來(lái)接收消息。

  1. . . .   
  2.         //Create JMS objects   
  3.         QueueConnection connection = factory.createQueueConnection();   
  4.         QueueSession session =   
  5.             connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);   
  6.         QueueReceiver receiver = session.createReceiver(queue);   
  7.         receiver.setMessageListener(this);   
  8.         connection.start();   
  9.         . . .   

9、QReceiver:等待 stop 并退出

接著(zhù),程序進(jìn)入一個(gè)循環(huán),它會(huì )在 stop 變量變?yōu)?true 時(shí)退出循環(huán)。在循環(huán)中,線(xiàn)程睡眠一秒鐘。一旦退出循環(huán), QueueConnection 就會(huì )退出,并且程序也會(huì )終止

  1. . . .   
  2.         //Wait for stop   
  3.         while (!stop) {   
  4.             Thread.sleep(1000);   
  5.         }   
  6.   
  7.         //Exit   
  8.         System.out.println("Exiting...");   
  9.         connection.close();   
  10.         System.out.println("Goodbye!");   
  11.   
  12.     } catch (Exception e) {   
  13.         e.printStackTrace();   
  14.         System.exit(1);   
  15.     }   
  16. }   
  17. . . .  

10、QReceiver:onMessage(Message) 方法

需要包含 QReceiver 類(lèi)的 onMessage(Message) 方法,因為 QReceiver 可以實(shí)現 MessageListener 接口。

接收消息時(shí),就調用這個(gè)方法,并將 Message 作為參數傳遞。

在這個(gè)實(shí)現中,我們獲得了消息的文本內容,并將它打印到 System.out。然后,檢查消息是否等于 stop,如果是,則將 stop 變量設置為 true,這會(huì )使 receive() 方法中的循環(huán)終止。

 

  1.     . . .   
  2.     public void onMessage(Message message) {   
  3.   
  4.         try {   
  5.             String msgText = ((TextMessagemessage).getText();   
  6.             System.out.println(msgText);   
  7.             if ("stop".equals(msgText))   
  8.                 stop = true;   
  9.         } catch (JMSException e) {   
  10.             e.printStackTrace();   
  11.             stop = true;   
  12.         }   
  13.     }   
  14. }   


11、源碼QSender.java 的代碼清單

java 代碼
  1. import java.io.*;   
  2. import javax.jms.*;   
  3. import javax.naming.*;   
  4.   
  5. public class QSender {   
  6.   
  7.     public static void main(String[] args) {   
  8.   
  9.         new QSender().send();   
  10.     }   
  11.   
  12.     public void send() {   
  13.   
  14.         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));   
  15.   
  16.         try {   
  17.             //Prompt for JNDI names   
  18.             System.out.println("Enter QueueConnectionFactory name:");   
  19.             String factoryName = reader.readLine();   
  20.             System.out.println("Enter Queue name:");   
  21.             String queueName = reader.readLine();   
  22.   
  23.             //Look up administered objects   
  24.             InitialContext initContext = new InitialContext();   
  25.             QueueConnectionFactory factory =   
  26.                 (QueueConnectionFactory) initContext.lookup(factoryName);   
  27.             Queue queue = (Queue) initContext.lookup(queueName);   
  28.             initContext.close();   
  29.   
  30.             //Create JMS objects   
  31.             QueueConnection connection = factory.createQueueConnection();   
  32.             QueueSession session =   
  33.                 connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);   
  34.             QueueSender sender = session.createSender(queue);   
  35.   
  36.             //Send messages   
  37.             String messageText = null;   
  38.             while (true) {   
  39.                 System.out.println("Enter message to send or ‘quit‘:");   
  40.                 messageText = reader.readLine();   
  41.                 if ("quit".equals(messageText))   
  42.                     break;   
  43.                 TextMessage message = session.createTextMessage(messageText);   
  44.                 sender.send(message);   
  45.             }   
  46.   
  47.             //Exit   
  48.             System.out.println("Exiting...");   
  49.             reader.close();   
  50.             connection.close();   
  51.             System.out.println("Goodbye!");   
  52.   
  53.         } catch (Exception e) {   
  54.             e.printStackTrace();   
  55.             System.exit(1);   
  56.         }   
  57.     }   
  58. }   

 

12、源碼QReceiver .java 的代碼清單

java 代碼
  1. import java.io.*;   
  2. import javax.jms.*;   
  3. import javax.naming.*;   
  4.   
  5. public class QReceiver implements MessageListener {   
  6.   
  7.     private boolean stop = false;   
  8.   
  9.     public static void main(String[] args) {   
  10.   
  11.         new QReceiver().receive();   
  12.     }   
  13.   
  14.     public void receive() {   
  15.   
  16.         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));   
  17.   
  18.         try {   
  19.             //Prompt for JNDI names   
  20.             System.out.println("Enter QueueConnectionFactory name:");   
  21.             String factoryName = reader.readLine();   
  22.             System.out.println("Enter Queue name:");   
  23.             String queueName = reader.readLine();   
  24.             reader.close();   
  25.   
  26.             //Look up administered objects   
  27.             InitialContext initContext = new InitialContext();   
  28.             QueueConnectionFactory factory =   
  29.                 (QueueConnectionFactory) initContext.lookup(factoryName);   
  30.             Queue queue = (Queue) initContext.lookup(queueName);   
  31.             initContext.close();   
  32.   
  33.             //Create JMS objects   
  34.             QueueConnection connection = factory.createQueueConnection();   
  35.             QueueSession session =   
  36.                 connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);   
  37.             QueueReceiver receiver = session.createReceiver(queue);   
  38.             receiver.setMessageListener(this);   
  39.             connection.start();   
  40.   
  41.             //Wait for stop   
  42.             while (!stop) {   
  43.                 Thread.sleep(1000);   
  44.             }   
  45.   
  46.             //Exit   
  47.             System.out.println("Exiting...");   
  48.             connection.close();   
  49.             System.out.println("Goodbye!");   
  50.   
  51.         } catch (Exception e) {   
  52.             e.printStackTrace();   
  53.             System.exit(1);   
  54.         }   
  55.     }   
  56.   
  57.     public void onMessage(Message message) {   
  58.   
  59.         try {   
  60.             String msgText = ((TextMessagemessage).getText();   
  61.             System.out.println(msgText);   
  62.             if ("stop".equals(msgText))   
  63.                 stop = true;   
  64.         } catch (JMSException e) {   
  65.             e.printStackTrace();   
  66.             stop = true;   
  67.         }   
  68.     }   
  69. }   
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Java之數據結構基礎、線(xiàn)性表、棧和隊列、數組和字符串,樹(shù)—
JMS服務(wù)器openJms入門(mén)
JMS應用的簡(jiǎn)單例子
java web 處理大量用戶(hù)并發(fā)提交的簡(jiǎn)單思路:隊列加定時(shí)提交
一個(gè)簡(jiǎn)單的java網(wǎng)絡(luò )爬蟲(chóng)(spider)
java的concurrent用法詳解
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久