MQ Java編程

上傳人:搶*** 文檔編號(hào):58840615 上傳時(shí)間:2022-03-01 格式:DOC 頁(yè)數(shù):28 大?。?16KB
收藏 版權(quán)申訴 舉報(bào) 下載
MQ Java編程_第1頁(yè)
第1頁(yè) / 共28頁(yè)
MQ Java編程_第2頁(yè)
第2頁(yè) / 共28頁(yè)
MQ Java編程_第3頁(yè)
第3頁(yè) / 共28頁(yè)

下載文檔到電腦,查找使用更方便

16 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《MQ Java編程》由會(huì)員分享,可在線閱讀,更多相關(guān)《MQ Java編程(28頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、 MQ Java編程 目標(biāo) 學(xué)習(xí)使用WebSphere MQ for Java編程。 1.1 概述 WebSphere MQ for Java允許用Java 編程語(yǔ)言寫成的程序直接訪問WebSphere MQ Server,或作為一個(gè)WebSphere MQ Client連接到WebSphere MQ。 1.2 平臺(tái) WebSphere MQ for Java 產(chǎn)品可用于以下平臺(tái): AIX iSeries 和OS/400 HP-UX Linux Sun Solaris z/OS 和OS/390 V2R9 或更高版本 Windows 平臺(tái)

2、 1.2.1 獲得軟件包 WebSphere MQ base Java的最新版本的安裝可以和WebSphere MQ同時(shí)安裝。關(guān)于WebSphere MQ的安裝可以參考下列資料: AIX 平臺(tái)的《WebSphere MQ for AIX, V5.3 Quick Beginnings 》 HP-UX平臺(tái)的《WebSphere MQ for HP-UX, V5.3 Quick Beginnings》 OS/400平臺(tái)的《WebSphere MQ for iSeries V5.3 Quick Beginnings 》 Linux 平臺(tái)的《WebSphere MQ for

3、 Linux for Intel and Linux for zSeries, V5.3 Quick Beginnings 》 Solaris 平臺(tái)的《WebSphere MQ for Solaris, V5.3 Quick Beginnings 》 Windows 平臺(tái)的《WebSphere MQ for Windows, V5.3 Quick Beginnings 》 z/OS 平臺(tái)的《WebSphere MQ for z/OS System Setup Guide 》 WebSphere MQ base Java 被包含在下列Java的.jar文件中: com

4、.ibm.mq.jar 這個(gè)jar文件支持所有的連接選項(xiàng)。 com.ibm.mqbind.jar 這個(gè)jar文件僅支持bindings連接,并不是在所有的平臺(tái)都提供或支持,所以我們推薦在新應(yīng)用程序中不要使用它。 1.2.2 WebSphere MQ for Java的運(yùn)行環(huán)境 為了運(yùn)行WebSphere MQ for Java,需要以下的軟件: 服務(wù)器端平臺(tái)的WebSphere MQ ; 服務(wù)器端平臺(tái)的Java Development Kit(JDK); 客戶端平臺(tái)的Java Development Kit 或Java Runtime Environmen

5、t(JRE)或支持Java 的網(wǎng)絡(luò)瀏覽器。 1.2.2.1安裝目錄 WebSphere MQ Java V5.3文件的安裝目錄如下表所示: 平臺(tái) 目錄 AIX /usr/mqm/java/ z/OS & OS/390 install_dir/mqm/java/ iSeries & AS/400(R) /QIBM/ProdData/mqm/java/ HP-UX 和 Sun Solaris /opt/mqm/java/ Linux install_dir/mqm/java/ Windows systems \Program Files\IBM\WebS

6、phere MQ\java 提示:install_dir 是產(chǎn)品安裝的目錄。在Linux 系統(tǒng)中,它可能是/opt,而在z/OS 和OS/390 系統(tǒng)上,它可能是/usr/lpp。 還提供了一些例子程序,例如安裝驗(yàn)證程序(IVP)。下表中列出了不同平臺(tái)的例子程序的目錄結(jié)構(gòu)。 平臺(tái) 目錄 AIX /usr/mqm/samp/java/base z/OS & OS/390 install_dir/mqm/java/samples/base iSeries & AS/400 /QIBM/ProdData/mqm/java/samples/base HP-UX and S

7、un Solaris /opt/mqm/samp/java/base Linux install_dir/mqm/samp/java/base Windows systems \Program Files\IBM\WebSphere MQ\tools\Java\base 提示:install_dir 是產(chǎn)品安裝的目錄。在Linux 系統(tǒng)中,它可能是/opt,而在z/OS 和OS/390 系統(tǒng)上,它可能是/usr/lpp。 1.2.2.2環(huán)境變量 產(chǎn)品安裝完成后,您必須更新CLASSPATH環(huán)境變量,CLASSPATH中需要包含WebSphere MQ base Java和

8、例子程序的目錄,如下表所示: 平臺(tái) CLASSPATH的參考設(shè)置 AIX CLASSPATH=/usr/mqm/java/lib/com.ibm.mq.jar: /usr/mqm/java/lib/connector.jar: /usr/mqm/java/lib: /usr/mqm/samp/java/base: HP-UX 和 Sun Solaris CLASSPATH=/opt/mqm/java/lib/com.ibm.mq.jar: /opt/mqm/java/lib/connector.jar: /opt/mqm/java/lib: /opt/mqm

9、/samp/java/base: Windows systems CLASSPATH=mq_root_dir(CPDNL1)\java\lib\com.ibm.mq.jar; mq_root_dir\java\lib\connector.jar; mq_root_dir\java\lib\; mq_root_dir\tools\java\base\; z/OS & OS/390 CLASSPATH=install_dir(CPDNL2)/mqm/java/lib/com.ibm.mq.jar: install_dir/mqm/java/lib/connector.jar

10、: install_dir/mqm/java/lib: install_dir/mqm/java/samples/base: iSeries & AS/400 CLASSPATH=/QIBM/ProdData/mqm/java/lib/com.ibm.mq.jar: /QIBM/ProdData/mqm/java/lib/connector.jar: /QIBM/ProdData/mqm/java/lib: /QIBM/ProdData/mqm/java/samples/base: Linux CLASSPATH=install_dir(CPDNL2)/mqm/jav

11、a/lib/com.ibm.mq.jar: install_dir/mqm/java/lib/connector.jar: install_dir/mqm/java/lib: install_dir/mqm/samp/java/base: 注意: 1. mq_root_dir 表示在Windows 系統(tǒng)的WebSphere MQ安裝目錄。通常是C:\Program Files\IBM\WebSphere MQ\。 2. install_dir是產(chǎn)品的安裝目錄。 如果現(xiàn)有的應(yīng)用程序依賴于com.ibm.mqbind,您必須要把com.ibm.mqbind.jar文件加到 c

12、lasspath中。 在某些平臺(tái)還必須要更新下列附加的環(huán)境變量,如下表所示: 平臺(tái) 環(huán)境變量 AIX LD_LIBRARY_PATH=/usr/mqm/java/lib HP-UX SHLIB_PATH=/opt/mqm/java/lib Sun Solaris LD_LIBRARY_PATH=/opt/mqm/java/lib Windows systems PATH=install_dir\lib z/OS & OS/390 LIBPATH=install_dir/mqm/java/lib Linux LD_LIBRARY_PATH=install_d

13、ir/mqm/java/lib 注意: install_dir是產(chǎn)品的安裝目錄。 注意: 確保您追加的WebSphere MQ的變量不要覆蓋現(xiàn)有的系統(tǒng)環(huán)境變量。如果覆蓋了系統(tǒng)的環(huán)境變量,那么應(yīng)用程序在編譯或運(yùn)行時(shí)將可能會(huì)失敗。 1.3 使用WebSphere MQ for Java 應(yīng)用程序連接到隊(duì)列管理器后,就可以與訪問WebSphere MQ對(duì)象(例如,隊(duì)列)。隊(duì)列管理器為其擁有的WebSphere MQ對(duì)象提供消息發(fā)送服務(wù)。使用WebSphere MQ classes for Java編程的方法依賴于使用的連接模式。連接的模式有兩種,分別是客戶連接模式和綁定模式。 1.

14、3.1客戶機(jī)連接模式 當(dāng)WebSphere MQ classes for Java作為客戶端時(shí),與WebSphere MQ C客戶端類似,但仍然存在如下區(qū)別: 1, 僅支持TCP/IP。 2, 不支持連接表。 3, 在啟動(dòng)時(shí),不讀取任何WebSphere MQ環(huán)境變量。 4, 通道的定義和環(huán)境變量信息都被存放在一個(gè)叫做Environment的類中,當(dāng)連接時(shí)這些信息也可以被作為入口參數(shù)。 5, 錯(cuò)誤和意外信息被寫到MQException類說(shuō)明的日志中。缺省錯(cuò)誤信息被寫到Java控制臺(tái)。 WebSphere MQ classes for Java 客戶端不支持MQBEGIN和快速綁定

15、。 當(dāng)利用客戶機(jī)連接時(shí),您必須指定其他一些環(huán)境屬性,以便建立與隊(duì)列管理器的連接。這些屬性是: 主機(jī)名,即作為隊(duì)列管理器主機(jī)的WebSphere MQ服務(wù)器的名字;以及通道名,即客戶 機(jī)連接通道的名字。另外,您也可以指定WebSphere MQ服務(wù)器監(jiān)聽的端口號(hào)。如果還沒有指定端口號(hào)的話,那么將使用默認(rèn)的端口號(hào)1414。 1.3.2綁定模式 在綁定模式(也稱作服務(wù)器連接模式)中,與隊(duì)列管理器的通訊利用的是進(jìn)程間通訊。關(guān)鍵因素之一就是,要記住綁定模式只適用于那些運(yùn)行在作為隊(duì)列管理器主機(jī)的WebSphere MQ 服務(wù)器上的程序。利用綁定模式的程序不會(huì)從WebSphere MQ客戶機(jī)機(jī)器上運(yùn)行

16、。換言之,應(yīng)用程序被綁定在隊(duì)列管理器所在的同一臺(tái)機(jī)器上。綁定模式是訪問WebSphere MQ 的一種快速而高效的方法。某些功能(如隊(duì)列管理器的擴(kuò)展架構(gòu)事務(wù)處理協(xié)同)只在綁定模式下才可用。 WebSphere MQ classes for Java的綁定模式與客戶連接模式存在下列區(qū)別: 1, 忽略了MQEnvironmnet類所提供的大多數(shù)參數(shù)。 2, 綁定模式支持MQBEGIN和快速綁定。 1.3.3 類庫(kù) WebSphere MQ classes for Java 提供了一系列可以使Java applet和應(yīng)用程序訪問WebSphere MQ的類。WebSphere MQ for

17、 Java 包括以下類和接口: 1.3.3.1類 MQChannelDefinition 該類用來(lái)傳遞有關(guān)連接隊(duì)列管理器的信息至發(fā)送、接收和安全退出。當(dāng)以綁定模式直接連接到WebSphere MQ時(shí),此類不適用。 MQChannelExit 當(dāng)調(diào)用發(fā)送、接收和安全退出時(shí),該類定義傳遞到這些調(diào)用的上下文信息。該類的exitResponse 屬性應(yīng)當(dāng)通過退出設(shè)置,以顯示W(wǎng)ebSphere MQ Client for Java 下一步應(yīng)當(dāng)采取何 種行動(dòng)。 MQDistributionList 該類代表開放式隊(duì)列集,我們可以利用put()方法的單一調(diào)用發(fā)送消息至這些隊(duì)列中。

18、我們利用MQDistributionList 構(gòu)造器或MQQueueManager 類的accessDistributionList()方法來(lái)做出該類的實(shí)例。 MQDistributionListItem 該類代表分配表中的單一項(xiàng)目(單一隊(duì)列)。該類繼承MQMessageTracker 類。 MQEnvironment 該類包含控制構(gòu)建MQQueueManager 對(duì)象(及其相對(duì)應(yīng)的到WebSphere MQ 的連接)環(huán)境的靜態(tài)元素變量。由于調(diào)用MQQueueManager 構(gòu)造器使該類值的集生效, 因此MQEnvironment 類的值應(yīng)當(dāng)在MQQueueManager 實(shí)例

19、構(gòu)建前設(shè)置。 MQException 該類包含WebSphere MQ 完成代碼和錯(cuò)誤代碼常量的定義。以MQCC_開始的常量是WebSphere MQ 完成代碼,而以MQRC_開始的常量則是WebSphere MQ 原因代碼。只要出現(xiàn)WebSphere MQ 錯(cuò)誤,就會(huì)給出MQException。 MQGetMessageOptions 該類包含控制MQQueue.get()方法行為的選項(xiàng)。 MQManagedObject 該類是MQQueueManager、MQQueue 和MQProcess 類的超類。它提供查詢并設(shè)置這些資源屬性的能力。 MQMessage

20、 該類代表WebSphere MQ 消息的消息描述器和數(shù)據(jù)。 MQMessageTracker 該類用來(lái)處理分配表中某個(gè)給定目的地的消息參數(shù)。MQDistributionListItem 繼承它。 MQPoolServices 用作WebSphere MQ 連接默認(rèn)ConnectionManager 的ConnectionManager,其實(shí)現(xiàn)可以使用該類。 MQPoolServicesEvent 只要添加或刪除MQPoolToken 到MQEnvironment 控制的權(quán)標(biāo)集,那么就可用該類來(lái)生成一個(gè)事件。當(dāng)默認(rèn)的ConnectionManager 改變時(shí), 即會(huì)生

21、成MQPoolServicesEvent。 MQPoolToken 該類可被用來(lái)提供默認(rèn)的連接集合。 MQProcess 該類為WebSphere MQ 進(jìn)程提供查詢操作。 MQPutMessageOptions 該類包含控制MQQueue.put()方法行為的選項(xiàng)。 MQQueue 該類為WebSphere MQ 隊(duì)列提供查詢、設(shè)置、放置和獲取操作。查詢和設(shè)置能力繼承自MQManagedObject。 MQQueueManager 該類代表WebSphere MQ 的隊(duì)列管理器。 MQSimpleConnectionManager 該類提

22、供基本的連接集合功能。 [ 本帖最后由 liusdream 于 2009-1-8 12:08 編輯 ] 搜索更多相關(guān)主題的帖子: Java Java TOP 2009年10月29日下午2~6點(diǎn),DB2性能調(diào)優(yōu)的親密接觸! 2# 大 中 小 發(fā)表于 2009-1-7 12:39 只看該作者 1.3.3.2接口 WebSphere MQ for Jave 具有以下接口: MQReceiveExit 該接口使得我們可以用WebSphere MQ for Java 檢查并有可能修改從隊(duì)列管理器接收的數(shù)據(jù)。當(dāng)以綁定模式直接連接到WebSphere

23、MQ 時(shí),該接口不適用。 MQSecurityExit 該接口使得我們可以嘗試定制連接到隊(duì)列管理器時(shí)出現(xiàn)的安全流。當(dāng)以綁定模式直接連接到WebSphere MQ 時(shí),這一接口不適用。 MQSendExit 該接口使得我們可以檢查并有可能修改用WebSphere MQ Client for Java 發(fā)送到隊(duì)列管理器的數(shù)據(jù)。當(dāng)以綁定模式直接連接到WebSphere MQ 時(shí),這一接口不適用。 1.4用WebSphere MQ Java API開展工作 我們?cè)诒竟?jié)中將探討利用WebSphere MQ Java API 進(jìn)行編程的方法。 1.4.1 設(shè)置連接 在本節(jié)中,我們將

24、看看綁定模式和客戶機(jī)連接模式是如何實(shí)現(xiàn)的。我們假定從設(shè)計(jì)的觀點(diǎn)出發(fā),您已經(jīng)決定用綁定模式或客戶機(jī)連接模式實(shí)現(xiàn),下面我們就來(lái)講解一下應(yīng)當(dāng)如何來(lái)實(shí)現(xiàn)的方法。 我們通過MQQueueManager 類的構(gòu)造器調(diào)用獲得到隊(duì)列管理器的連接。在這個(gè)時(shí)候,我們所獲得連接的類型是由MQEnvironment 類的某些靜態(tài)字段決定的。區(qū)別不同連接模式的靜態(tài)字段設(shè)置分別是主機(jī)、通道、userId 和口令。在這些用以連接到隊(duì)列管理器的MQEnvironment 字段中,最能區(qū)別出綁定模式和客戶機(jī)連接模式的兩個(gè)字段設(shè)置就是主機(jī)和通道。在綁定模式中,除了userId 和口令字段外,您不必為這些字段中的任何一個(gè)設(shè)置值。

25、您也可以選擇在綁定模式中設(shè)置它們。 MQEnvironment.hostName 對(duì)客戶機(jī)連接而言,我們應(yīng)當(dāng)將此設(shè)為隊(duì)列管理器所在主機(jī)的主機(jī)名。由于該主機(jī)名用于到隊(duì)列管理器運(yùn)行機(jī)器的TCP/IP 連接,因此其值不區(qū)分大小寫,請(qǐng)看下面的例子: MQEnvironment.host = “” ; MQEnvironment.channel 這是客戶機(jī)連接通道的名。該字段的值是區(qū)分大小寫的。一般說(shuō)來(lái),它就是隊(duì)列管理器下面服務(wù)器連接通道的名。是一個(gè)雙向鏈接,它使在客戶機(jī)和隊(duì)列管理器之間的MQI 調(diào)用和回復(fù)成為可能。對(duì)客戶機(jī)連接而言,我們應(yīng)當(dāng)將其設(shè)為應(yīng)用程序嘗試連接的隊(duì)列管

26、理器下面服務(wù)器連接通道的名,請(qǐng)看下面的例子: MQEnvironment.channel = “JAVA.CLIENT.CHNL”; MQEnvironment.port 端口號(hào)是一個(gè)可選字段。在默認(rèn)情況下,客戶機(jī)會(huì)嘗試在主機(jī)的1414 號(hào)端口上連接到隊(duì)列管理器。1414 號(hào)端口是WebSphere MQ監(jiān)聽器默認(rèn)使用的端口。如果該端口號(hào)與默認(rèn)的不同,那么您可以用MQEnvironment.port 字段來(lái)指定端口號(hào),請(qǐng)看下面的例子: MQEnvironment.port = nnnn; MQEnvironment.userId 和MQEnvironment.pass

27、word userId 和口令字段在默認(rèn)情況下是空的。您可以通過設(shè)置userId 和口令字段的值來(lái)指定userId 和口令,請(qǐng)看下面的例子: MQEnvironment.userId = “userXYZ” ; MQEnvironment.password = “password” ; MQEnvironment.properties 這是定義WebSphere MQ 環(huán)境的關(guān)鍵值對(duì)的散列表。如果您不是使用VisiBroker 連接的話,那么就應(yīng)當(dāng)將該字段在綁定和客戶機(jī)連接情況下都做如下設(shè)置: MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_WE

28、BSPHERE MQ MQEnvironment 類中的變量控制著到隊(duì)列管理器的連接調(diào)用。設(shè)置連接到隊(duì)列管理器的第一步就是根據(jù)連接模式的類型來(lái)設(shè)置MQEnvironment 字段, 我們通過創(chuàng)建MQQueueManager 類的新的實(shí)例、發(fā)出MQQueueManager 類的構(gòu)造器調(diào)用來(lái)獲得到隊(duì)列管理器的連接。MQQueueManager 類有過載的構(gòu)造器。我們要根據(jù)創(chuàng)建MQQueueManager 類新實(shí)例時(shí)提供的參數(shù)來(lái)調(diào)用合適的構(gòu)造器建立連接。在最簡(jiǎn)單的情況中,您可以提供隊(duì)列管理器名作為字符串,從而創(chuàng)建QueueManager 類的新實(shí)例,請(qǐng)看下面的例子: MQQueueManag

29、er qmgr = new MQQueueManager(“ITSOG.QMGR1”) ; 在這里,ITSOG.QMGR1是隊(duì)列管理器名。上面的方法在綁定模式和客戶機(jī)連接模式中都有效。 在第二種方法中,您可以提供隊(duì)列管理器名以及具有設(shè)置環(huán)境選項(xiàng)關(guān)鍵值對(duì)的散列表,從而創(chuàng)建MQQueueManager 類的新實(shí)例。利用這種方法時(shí),提供的屬性會(huì)覆蓋MQEnvironment 類中設(shè)置的值。如果您希望在隊(duì)列管理器到隊(duì)列管理器的情況下設(shè)置環(huán)境值,那么您就可以使用此方法。請(qǐng)看下面的例子: MQQueueManager qmgr = new MQQueueManager(queueManagerN

30、ame ,propertiesHashTable); 第三種方法就是通過提供隊(duì)列管理器名和隊(duì)列管理器打開選項(xiàng),從而創(chuàng)建MQQueueManager 類的新實(shí)例(它是一個(gè)整數(shù)字段)。只有在綁定模式中才能使用該方法。選項(xiàng)字段使您可以在快速綁定或正常綁定間作出選擇。請(qǐng)看下面的例子: MQQueueManager qmgr = new MQQueueMager(queueManagerName , MQC.MQCNO_FASTPATH_BINDING ) ; 3# 大 中 小 發(fā)表于 2009-1-7 12:39 只看該作者 1.4.2 打開隊(duì)列 為了對(duì)隊(duì)列進(jìn)行操作,我們

31、首先應(yīng)當(dāng)通過打開隊(duì)列以獲得隊(duì)列句柄或隊(duì)列對(duì)象。打開隊(duì)列有兩種方法。我們可以利用MQQueueManager 對(duì)象的accessQueue 方法,也可以通過調(diào)用MQQueue 類的構(gòu)造器。 這兩種不同調(diào)用的形式如下: MQQueue queue = qmgr.accessQueue(“qName’, openOption, “qMgrName” , “dynamicQname”, “alternateUserId”); 使用MQQueue 類構(gòu)造器的第二種方法,需要添加一個(gè)隊(duì)列管理器參數(shù), MQQueue queue = new MQQueue(qmgr, “qName’, o

32、penOption, “qMgrName” , “dynamicQname”, “alternateUserId”); WebSphere MQ 將在打開隊(duì)列過程中根據(jù)用戶認(rèn)證保證openOption 的有效性。MQQueue 類的對(duì)象代表著隊(duì)列。它既擁有有助于消息發(fā)送(即放置、獲取、設(shè)置、查詢)的方法,也有對(duì)應(yīng)于隊(duì)列屬性的屬性。 1.4.3 處理WebSphere MQ消息 MQMessage 類的對(duì)象代表著將被放置到隊(duì)列上或?qū)年?duì)列獲取的消息。它既包括應(yīng)用程序數(shù)據(jù),又包括MQMD。既具有對(duì)應(yīng)于MQMD 字段的屬性,又具有向消息寫入或從消息讀取不同數(shù)據(jù)類型的應(yīng)用程序數(shù)據(jù)的方法。在

33、應(yīng)用程序中,MQMessage 代表著一個(gè)緩沖區(qū)。應(yīng)用程序不必聲明緩沖區(qū)的大小,因?yàn)樗鼤?huì)隨著寫入的數(shù)據(jù)而不斷改變。但是,如果消息大小超過了隊(duì)列的MaximumMessageLength 屬性的話,您就不能將消息放到隊(duì)列中。 為了創(chuàng)建消息,您應(yīng)當(dāng)創(chuàng)建MQMessage 類的新實(shí)例。我們利用writeXXX 方法根據(jù)特定應(yīng)用程序數(shù)據(jù)類型將應(yīng)用程序數(shù)據(jù)寫入消息。數(shù)字和字符串等數(shù)據(jù)類型格式可以通過characterSet 和編碼等MQMD 屬性來(lái)控制。我們可以在放置消息到隊(duì)列上之前設(shè)置MQMD 字段,也可以在從隊(duì)列獲取消息時(shí)讀取MQMD 字段。應(yīng)用程序通過設(shè)置合適的放置或獲取操作選項(xiàng),從而控制著

34、消息放置到隊(duì)列或從隊(duì)列獲取消息的方式。我們通過設(shè)置合適的放置消息選項(xiàng)值來(lái)控制消息放置到隊(duì)列的方式。同樣,我們也可以通過設(shè)置合適的獲取消息選項(xiàng)來(lái)控制從隊(duì)列接收消息的方式。 放置消息選項(xiàng) 消息放置到隊(duì)列上的方式是由MQPutMessageOptions 類實(shí)例的選項(xiàng)字段的值來(lái)決定的。我們可以利用WebSphere MQ 常量接口 MQC 的MQPMO 結(jié)構(gòu)來(lái)設(shè)置選項(xiàng)的值。請(qǐng)看下面的例子: MQPutMessageOptions pmo = new MQPutMessageOption(); MQPutMessageOptions 類的實(shí)例,其選項(xiàng)屬性的值設(shè)置為默認(rèn)值。這在大多數(shù)

35、簡(jiǎn)單消息發(fā)送情境中都已經(jīng)足夠了。您可以利用WebSphere MQ 常量接口MQC 的MQPMO 結(jié)構(gòu)來(lái)設(shè)置任意特定的選項(xiàng),例如: pmo.options = pmo.options + MQC.MQPMO_NEW_MSG_ID 上面的例子設(shè)置了選項(xiàng)字段的值,指令隊(duì)列管理器為消息生成新的消息ID 并將其設(shè)為MQMD 的MsgId 字段。 獲取消息選項(xiàng) 從隊(duì)列接收消息的方式是由MQGetMessageOptions 類實(shí)例的選項(xiàng)字段的值決定的。我們可以利用WebSphere MQ Constants MQC 的MQOO 結(jié)構(gòu)來(lái)設(shè)置選項(xiàng)的值。請(qǐng)看下面的例子: MQGetMes

36、sageOptions gmo = new MQGetMessageOption(); MQGetMessageOptions 類的新實(shí)例將選項(xiàng)屬性的值設(shè)為默認(rèn)值。您可以利用MQPOO 結(jié)構(gòu)來(lái)設(shè)置合適的獲取消息選項(xiàng)。請(qǐng)看下面的例子: gmo.options = gmo.options + MQC.MQGMO_NO_WAIT; 以上選項(xiàng)指定了如果隊(duì)列上沒有消息的話,那么獲取消息調(diào)用將立即返回。發(fā)送消息我們利用MQQueue 類的put(MQMessage message)或put(MQMessage message, MQPutMessageOptions pmo)方法來(lái)發(fā)送消息

37、。放置方法調(diào)用控制著消息放置到隊(duì)列上的方式。 獲取消息 我們利用MQQueue 類的get ( MQMessage message ) 或get ( MQMessage, MQGetMessageOptions gmo)、get(MQMessage, MQGetMessageOptions gmo, int max MessageSize)方法來(lái)從WebSphere MQ 隊(duì)列接收消息。所有從給定MQQueueManager 到WebSphere MQ的調(diào)用都是同步的。 注意: 如果您進(jìn)行帶有等待的獲取調(diào)用的話,那么直到獲取調(diào)用完成之前,所有其他利 用相同MQQueu

38、eManager 的線程都將被封鎖,不能發(fā)出進(jìn)一步的WebSphere MQ調(diào)用。如果 您需要多線程同時(shí)來(lái)訪問WebSphere MQ的話,那么每個(gè)線程都必須創(chuàng)建其自己的MQQueueManager 對(duì)象。 如果沒有指定MaxMessageSize 的話,那么將自動(dòng)調(diào)整消息緩沖區(qū)長(zhǎng)度為將要到達(dá)的消息的大小。如果您以獲取方法調(diào)用使用MaxMessageSize 的話,那么該調(diào)用將能接收最大的消息。如果隊(duì)列上的消息比它還要大的話,那么就會(huì)出現(xiàn)下面兩種情況之一: 1. 如果MQC.MQGMO_ACCEPT_TRUNCATED_MSG 標(biāo)記在MQGetMessageOptions 對(duì)象的選

39、項(xiàng)元素變量中得到設(shè)置的話,那么將根據(jù)指定緩沖區(qū)的大小向消息填充最多的數(shù)據(jù),并且會(huì)返回完成代碼為MQException.MQCC_WARNING 和原因代碼為 MQException.MQRC_TRUNCATED_MSG_ACCEPTED的結(jié)果。 2. 如果沒有設(shè)置MQC.MQGMO_ACCEPT_TRUNCATED_MSG 標(biāo)記的話,那么消息將被留在隊(duì)列上,并且會(huì)返回完成代碼是MQException.MQCC_WARNING 和原因代碼是 MQeception.MQRC_TRUNCATED_MSG_FAILED 的結(jié)果。 1.5應(yīng)用程序開發(fā) 在本節(jié)中,我們將探討發(fā)送-遺忘、請(qǐng)求/

40、回復(fù)和消息分組點(diǎn)到點(diǎn)消息發(fā)送模式的實(shí)現(xiàn)。在點(diǎn)到點(diǎn)模式中,應(yīng)用程序成對(duì)活動(dòng)。我們稱作發(fā)送器的發(fā)送應(yīng)用程序?qū)⑾⒎胖迷诎l(fā)送方的WebSphere MQ 應(yīng)用程序隊(duì)列上。在目的地系統(tǒng)或接收方上,我們稱作接收器的應(yīng)用程序從WebSphere MQ 應(yīng)用程序隊(duì)列接收消息。因此,發(fā)送器和接收器應(yīng)用程序是成對(duì)活動(dòng)的,實(shí)現(xiàn)了在來(lái)源和目的地系統(tǒng)之間的數(shù)據(jù)移動(dòng)或消息發(fā)送。 在我們所舉的這些例子中,用到了到隊(duì)列管理器的客戶機(jī)連接。在這些例子中用到的WebSphere MQ 對(duì)象是在主機(jī)ITSOG 上稱作ITSOG.QMGR1 的隊(duì)列管理器。用于客戶機(jī)連接的通道是JAVA.CLIENT.CHNL,端口就是默認(rèn)端

41、口1414。我們所用的應(yīng)用程序隊(duì)列是SAMPLE.QUEUE。 1.5.1簡(jiǎn)單的消息發(fā)送器應(yīng)用程序 我們的第一個(gè)點(diǎn)到點(diǎn)客戶機(jī)程序?qū)?chuàng)建一個(gè)簡(jiǎn)單的消息并發(fā)送它到WebSphere MQ 隊(duì)列。我們還將講解處理發(fā)送器發(fā)送消息的接收器程序。 有關(guān)步驟如下: 調(diào)入WebSphere MQ Java API package; 為客戶機(jī)連接設(shè)置環(huán)境屬性; 連接到隊(duì)列管理器; 為打開WebSphere MQ 隊(duì)列設(shè)置選項(xiàng); 為發(fā)送消息打開應(yīng)用程序隊(duì)列; 設(shè)置選項(xiàng),放置消息到應(yīng)用程序隊(duì)列上; 創(chuàng)建消息緩沖區(qū); 使用用戶數(shù)據(jù)和任何消息描述器字段準(zhǔn)備消息;

42、 放置消息到隊(duì)列上。 以下程序PtpSender.java 就是將在應(yīng)用程序隊(duì)列上發(fā)送消息的發(fā)送器應(yīng)用程序: import com.ibm.mq.*; public class Typesetter { public static void main(String args[]) { try { String hostName = "ITSOG" ; String channel = "JAVA.CLIENT.CHNL" ; String qManager = "ITSOG.QMGR1" ; String qName = "SAMPLE.QUEUE" ; /

43、*設(shè)置MQEnvironment 屬性以便客戶機(jī)連接*/ MQEnvironment.hostname = hostName ; MQEnvironment.channel = channel ; MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_WEBSPHERE MQ); /*連接到隊(duì)列管理器*/ MQQueueManager qMgr = new MQQueueManager(qManager) ; /*設(shè)置打開選項(xiàng)以便打開用于輸出的隊(duì)列,如果隊(duì)列管理器正在停止,我們也已設(shè)置了選項(xiàng)去應(yīng)對(duì)

44、不成功情況。*/ int openOptions = MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING ; /*打開隊(duì)列*/ MQQueue queue = qMgr.accessQueue(qName, openOptions, null, null, null); /*設(shè)置放置消息選項(xiàng)我們將使用默認(rèn)設(shè)置*/ MQPutMessageOptions pmo = new MQPutMessageOptions(); /*創(chuàng)建消息,MQMessage 類包含實(shí)際消息數(shù)據(jù)的數(shù)據(jù)緩沖區(qū),和描述消息的所有MQMD 參數(shù)*/

45、/*創(chuàng)建消息緩沖區(qū)*/ MQMessage outMsg = new MQMessage(); /*設(shè)置MQMD 格式字段*/ outMsg.format = MQC.MQFMT_STRING ; /*準(zhǔn)備用戶數(shù)據(jù)消息*/ String msgString = "Test Message from PtpSender program "; outMsg.writeString(msgString); /*在隊(duì)列上放置消息*/ queue.put(outMsg, pmo); /*提交事務(wù)處理*/ qMmit(); System.out.println

46、(" The message has been Successfully put!\n"); /*關(guān)閉隊(duì)列和隊(duì)列管理器對(duì)象*/ queue.close(); qMgr.disconnect(); } catch (MQException ex) { System.out.println("An MQ Error Occurred: Completion Code is :\t" + pletionCode + "\n\n The Reason Code is :\t" + ex.reasonCode ); ex.printStackTrace(); } catch(E

47、xception e) { e.printStackTrace(); } } } TOP 2009年10月29日下午2~6點(diǎn),DB2性能調(diào)優(yōu)的親密接觸! ? 4# 大 中 小 發(fā)表于 2009-1-7 12:39 只看該作者 1.5.2簡(jiǎn)單的消息接收應(yīng)用程序 我們的下一個(gè)點(diǎn)到點(diǎn)客戶機(jī)程序是消息接收器應(yīng)用程序,它獲取PtpSender 應(yīng)用程序所發(fā)送的消息并在控制臺(tái)上將消息打印出來(lái)。 有關(guān)步驟如下: 調(diào)入WebSphere MQ Java API package; 為客戶機(jī)連接設(shè)置環(huán)境屬性; 連接到隊(duì)列管理器; 為打開WebSphe

48、re MQ 隊(duì)列設(shè)置選項(xiàng); 為獲取消息打開應(yīng)用程序; 設(shè)置選項(xiàng),從應(yīng)用程序隊(duì)列獲取消息; 創(chuàng)建消息緩沖區(qū); 從隊(duì)列獲取消息到消息緩沖區(qū); 從消息緩沖區(qū)讀取用戶數(shù)據(jù)并在控制臺(tái)上顯示。 以下程序PtpReceiver.java 就是將從應(yīng)用程序隊(duì)列上獲取消息的接收應(yīng)用程序: import com.ibm.mq.* ; public class PtpReceiver { public static void main(String args[]) { try { String hostName = "ITSOG" ; String channe

49、l = "JAVA.CLIENT.CHNL" ; String qManager = "ITSOG.QMGR1" ; String qName = "SAMPLE.QUEUE" ; /設(shè)置 MQEnvironment 屬性以便客戶機(jī)連接*/ MQEnvironment.hostname = hostName ; MQEnvironment.channel = channel ; MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_WEBSPHERE MQ); /*連接到隊(duì)列管理器*/

50、 MQQueueManager qMgr = new MQQueueManager(qManager) ; /*設(shè)置打開選項(xiàng)以便打開用于輸出的隊(duì)列,如果隊(duì)列管理器停止,我們也 已設(shè)置了選項(xiàng)去應(yīng)對(duì)不成功情況*/ int openOptions = MQC.MQOO_INPUT_SHARED | MQC.MQOO_FAIL_IF_QUIESCING ; /*打開隊(duì)列*/ MQQueue queue = qMgr.accessQueue(qName, openOptions, null, null, null); /*設(shè)置放置消息選項(xiàng)*/ MQGetMess

51、ageOptions gmo = new MQGetMessageOptions(); /*在同步點(diǎn)控制下獲取消息*/ gmo.options = gmo.options + MQC.MQGMO_SYNCPOINT ; /*如果在隊(duì)列上沒有消息則等待*/ gmo.options = gmo.options + MQC.MQGMO_WAIT ; /*如果隊(duì)列管理器停頓則失敗*/ gmo.options = gmo.options + MQC.MQGMO_FAIL_IF_QUIESCING ; /*設(shè)置等待的時(shí)間限制*/ gmo.waitInterval =

52、3000 ; /*創(chuàng)建MQMessage 類*/ MQMessage inMsg = new MQMessage(); /*從隊(duì)列到消息緩沖區(qū)獲取消息*/ queue.get(inMsg, gmo) ; /*從消息讀取用戶數(shù)據(jù)*/ String msgString = inMsg.readString(inMsg.getMessageLength()); System.out.println(" The Message from the Queue is : " + msgString); /*提交事務(wù)*/ qMmit(); /*關(guān)閉隊(duì)列和隊(duì)列管理器

53、對(duì)象*/ queue.close(); qMgr.disconnect(); } catch (MQException ex) { System.out.println("An MQ Error Occurred: Completion Code is :\t" + pletionCode + "\n\n The Reason Code is :\t" + ex.reasonCode ); ex.printStackTrace(); } catch(Exception e) { e.printStackTrace(); } } } 1.5.3請(qǐng)求/回復(fù)

54、在請(qǐng)求/回復(fù)消息發(fā)送模式中,一個(gè)應(yīng)用程序發(fā)送一條消息(請(qǐng)求消息)到另一個(gè)回復(fù)應(yīng)用程序(回復(fù)生成器)再到請(qǐng)求消息。生成回復(fù)的應(yīng)用程序獲取請(qǐng)求消息、處理請(qǐng)求, 并向請(qǐng)求應(yīng)用程序發(fā)出回復(fù)?;貜?fù)發(fā)送到由請(qǐng)求消息的消息標(biāo)題屬性replyToQueueManager 指定的隊(duì)列。請(qǐng)求應(yīng)用程序在放置消息到隊(duì)列上之前會(huì)在請(qǐng)求消息上設(shè)置這些消息標(biāo)題屬性。 請(qǐng)求應(yīng)用程序讓隊(duì)列管理器生成唯一的messageId,以及回復(fù)應(yīng)用程序拷貝請(qǐng)求消息的 messageId 到回復(fù)消息的correlationId 上。請(qǐng)求應(yīng)用程序使用回復(fù)消息的correlationId 值, 將回復(fù)映射回原始的請(qǐng)求。 我們將利用一對(duì)

55、簡(jiǎn)單的應(yīng)用程序來(lái)講解請(qǐng)求回復(fù)模式。第一個(gè)應(yīng)用程序(我們稱作請(qǐng)求器)放置一條簡(jiǎn)單的消息到隊(duì)列(請(qǐng)求隊(duì)列)上。請(qǐng)求器在放置請(qǐng)求消息到隊(duì)列上之前會(huì)在請(qǐng)求消息上設(shè)置replyToQueue 和replyToQueueManager 消息標(biāo)題屬性。而后,它將打開回復(fù)隊(duì)列并等待correlationId 匹配已發(fā)出請(qǐng)求消息的messageId 值的消息。服務(wù)于請(qǐng)求消息的回復(fù)應(yīng)用程序獲取消息,準(zhǔn)備回復(fù)消息,并將它發(fā)送到請(qǐng)求消息指定的隊(duì)列管理器下的回復(fù)隊(duì)列上。它還將從請(qǐng)求消息拷貝messageId 到回復(fù)消息的correlationId消息標(biāo)題字段。 應(yīng)用程序Requester.java 即發(fā)送請(qǐng)求消息

56、并且等待從回復(fù)應(yīng)用程序獲得回復(fù)的應(yīng)用程序。 有關(guān)步驟如下: 調(diào)入必要的包; 為客戶機(jī)連接設(shè)置MQEnvironment 屬性; 連接到隊(duì)列管理器; 打開請(qǐng)求隊(duì)列以獲得輸出; 設(shè)置放置消息選項(xiàng); - 準(zhǔn)備請(qǐng)求消息; - 設(shè)置到隊(duì)列名的回復(fù); 設(shè)置到隊(duì)列管理器名的回復(fù); 放置請(qǐng)求消息到請(qǐng)求隊(duì)列上; 關(guān)閉請(qǐng)求隊(duì)列; 打開回復(fù)隊(duì)列以獲得輸入; 設(shè)置獲取消息選項(xiàng); - 設(shè)置選項(xiàng),匹配回復(fù)消息上的correlationID; - 用等待(等待匹配correlationId 的回復(fù)消息)在回復(fù)隊(duì)列上發(fā)出獲取。 注意: 我們建議您為

57、回復(fù)消息在獲取調(diào)用上使用確定的等待時(shí)間。等待間隔可以設(shè)為系統(tǒng)所允許的等待回復(fù)的最大時(shí)間。 import com.ibm.mq.*; public class Requester { public static void main(String args[]) { try { String hostName = "ITSOG" ; String channel = "JAVA.CLIENT.CHNL" ; String qManager = "ITSOG.QMGR1" ; String requestQueue = "SAMPLE.REQUEST" ; String rep

58、lyToQueue = "SAMPLE.REPLY" ; String replyToQueueManager = "ITSOG.QMGR1" ; /*設(shè)置MQEnvironment 屬性以便客戶機(jī)連接*/ MQEnvironment.hostname = hostName ; MQEnvironment.channel = channel ; MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_WEBSPHERE MQ); /*連接到隊(duì)列管理器*/ MQQueueManager qMgr

59、 = new MQQueueManager(qManager) ; /*設(shè)置打開選項(xiàng)以便打開用于輸出的隊(duì)列,如果隊(duì)列管理器停止,我們也已設(shè)置了選項(xiàng)去應(yīng)對(duì)不成功情況*/ int openOptions = MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING ; /*打開打開隊(duì)列*/ MQQueue queue = qMgr.accessQueue(requestQueue, openOptions, null, null, null); /*設(shè)置放置消息選項(xiàng),我們將使用默認(rèn)設(shè)置*/ MQPutMessageOptions pm

60、o = new MQPutMessageOptions(); pmo.options = pmo.options + MQC.MQPMO_NEW_MSG_ID ; pmo.options = pmo.options + MQC.MQPMO_SYNCPOINT ; /*創(chuàng)建消息緩沖區(qū)*/ MQMessage outMsg = new MQMessage(); /*設(shè)置MQMD 格式字段*/ outMsg.format = MQC.MQFMT_STRING ; outMsg.messageFlags = MQC.MQMT_REQUEST ; outMsg.replyTo

61、QueueName = replyToQueue; outMsg.replyToQueueManagerName = replyToQueueManager ; /*準(zhǔn)備用戶數(shù)據(jù)消息*/ String msgString = "Test Request Message from Requester program "; outMsg.writeString(msgString); /*在隊(duì)列上放置消息*/ queue.put(outMsg, pmo); /*提交事務(wù)*/ qMmit(); System.out.println(" The message has

62、 been Successfully put\n"); /*關(guān)閉請(qǐng)求隊(duì)列*/ queue.close(); /*設(shè)置打開選項(xiàng)以便隊(duì)列響應(yīng)*/ openOptions = MQC.MQOO_INPUT_SHARED | MQC.MQOO_FAIL_IF_QUIESCING ; MQQueue respQueue = qMgr.accessQueue(replyToQueue, openOptions, null, null, null); MQMessage respMessage = new MQMessage(); MQGetMessageOptions gmo

63、 = new MQGetMessageOptions(); /*在同步點(diǎn)控制下獲取消息*/ gmo.options = gmo.options + MQC.MQGMO_SYNCPOINT ; gmo.options = gmo.options + MQC.MQGMO_WAIT ; gmo.matchOptions = MQC.MQMO_MATCH_CORREL_ID; gmo.waitInterval = 10000 ; respMessage.correlationId = outMsg.messageId ; /*獲取響應(yīng)消息*/ respQueue.get(r

64、espMessage, gmo); String response = respMessage.readString(respMessage.getMessageLength()); System.out.println("The response message is : " + response); qMmit(); respQueue.close(); qMgr.disconnect(); } catch (MQException ex) { System.out.println("An MQ Error Occurred: Completion Code is :\t

65、" + pletionCode + "\n\n The Reason Code is :\t" + ex.reasonCode ); ex.printStackTrace(); } catch(Exception e) { e.printStackTrace(); } } } TOP 芯存絕配專家挑戰(zhàn)賽,上網(wǎng)本、iPhone、數(shù)碼相機(jī)大獎(jiǎng)等您拿! 眼鏡蛇的崛起:參與即有機(jī)會(huì)獲取精美禮品! 5# 大 中 小 發(fā)表于 2009-1-7 12:39 只看該作者 1.5.4回復(fù)應(yīng)用程序 回復(fù)器應(yīng)用程序Responder.java 處理來(lái)自請(qǐng)求隊(duì)列的請(qǐng)求

66、消息并發(fā)送回復(fù)到請(qǐng)求應(yīng)用程序指定的請(qǐng)求隊(duì)列上。 import com.ibm.mq.* ; public class Responder { public static void main(String args[]) { try { String hostName = "ITSOG" ; String channel = "JAVA.CLIENT.CHNL" ; String qManager = "ITSOG.QMGR1" ; String qName = "SAMPLE.REQUEST" ; /*設(shè)置MQEnvironment 屬性以便客戶機(jī)連接*/ MQEnvironment.hostname = hostName ; MQEnvironment.channel = channel ; MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_

展開閱讀全文
溫馨提示:
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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔

相關(guān)搜索

關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!