文章來(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)。
3、QSender查找管理對象
send() 方法的第二部分用前面輸入的名字在 JNDI 中查找受管理的對象。通過(guò)舉例說(shuō)明 InitialContext 對象訪(fǎng)問(wèn) JNDI,通過(guò)調用lookup(String) 方法并傳遞要獲取的對象的名字來(lái)檢索受管理的對象。注意, lookup(String) 方法返回的是 Object,所以必須對返回的對象進(jìn)行類(lèi)型強制轉換。
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ā)送消息。
5、QSender:發(fā)送消息
現在就可以發(fā)送消息了。在這一部分中,我們進(jìn)入一個(gè)循環(huán),該循環(huán)提示我們要發(fā)送的消息的文本。如果用戶(hù)輸入 quit,則退出循環(huán)。
否則要在輸入的文本中建立一個(gè) TextMessage ,并用 QueueSender 發(fā)送消息,然后返回循環(huán)的開(kāi)始部分。
6、QSender:退出
退出循環(huán)后,關(guān)閉 QueueConnection。關(guān)閉 QueueConnection 會(huì )自動(dòng)關(guān)閉 QueueSession 和 QueueSender。
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)異步接收消息。
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)接收消息。
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ì )終止
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)終止。
11、源碼QSender.java 的代碼清單
12、源碼QReceiver .java 的代碼清單
聯(lián)系客服