MQ Java編程

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

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

16 積分

下載資源

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

資源描述:

《MQ Java編程》由會員分享,可在線閱讀,更多相關(guān)《MQ Java編程(28頁珍藏版)》請在裝配圖網(wǎng)上搜索。

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

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

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

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

5、t(JRE)或支持Java 的網(wǎng)絡(luò)瀏覽器。 1.2.2.1安裝目錄 WebSphere MQ Java V5.3文件的安裝目錄如下表所示: 平臺 目錄 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。 還提供了一些例子程序,例如安裝驗證程序(IVP)。下表中列出了不同平臺的例子程序的目錄結(jié)構(gòu)。 平臺 目錄 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、例子程序的目錄,如下表所示: 平臺 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中。 在某些平臺還必須要更新下列附加的環(huán)境變量,如下表所示: 平臺 環(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)用程序在編譯或運行時將可能會失敗。 1.3 使用WebSphere MQ for Java 應(yīng)用程序連接到隊列管理器后,就可以與訪問WebSphere MQ對象(例如,隊列)。隊列管理器為其擁有的WebSphere MQ對象提供消息發(fā)送服務(wù)。使用WebSphere MQ classes for Java編程的方法依賴于使用的連接模式。連接的模式有兩種,分別是客戶連接模式和綁定模式。 1.

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

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

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

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

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

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

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

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

22、供基本的連接集合功能。 [ 本帖最后由 liusdream 于 2009-1-8 12:08 編輯 ] 搜索更多相關(guān)主題的帖子: Java Java TOP 2009年10月29日下午2~6點,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 檢查并有可能修改從隊列管理器接收的數(shù)據(jù)。當(dāng)以綁定模式直接連接到WebSphere

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

42、 放置消息到隊列上。 以下程序PtpSender.java 就是將在應(yīng)用程序隊列上發(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 屬性以便客戶機連接*/ MQEnvironment.hostname = hostName ; MQEnvironment.channel = channel ; MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_WEBSPHERE MQ); /*連接到隊列管理器*/ MQQueueManager qMgr = new MQQueueManager(qManager) ; /*設(shè)置打開選項以便打開用于輸出的隊列,如果隊列管理器正在停止,我們也已設(shè)置了選項去應(yīng)對

44、不成功情況。*/ int openOptions = MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING ; /*打開隊列*/ MQQueue queue = qMgr.accessQueue(qName, openOptions, null, null, null); /*設(shè)置放置消息選項我們將使用默認(rèn)設(shè)置*/ MQPutMessageOptions pmo = new MQPutMessageOptions(); /*創(chuàng)建消息,MQMessage 類包含實際消息數(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); /*在隊列上放置消息*/ queue.put(outMsg, pmo); /*提交事務(wù)處理*/ qMmit(); System.out.println

46、(" The message has been Successfully put!\n"); /*關(guān)閉隊列和隊列管理器對象*/ 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點,DB2性能調(diào)優(yōu)的親密接觸! ? 4# 大 中 小 發(fā)表于 2009-1-7 12:39 只看該作者 1.5.2簡單的消息接收應(yīng)用程序 我們的下一個點到點客戶機程序是消息接收器應(yīng)用程序,它獲取PtpSender 應(yīng)用程序所發(fā)送的消息并在控制臺上將消息打印出來。 有關(guān)步驟如下: 調(diào)入WebSphere MQ Java API package; 為客戶機連接設(shè)置環(huán)境屬性; 連接到隊列管理器; 為打開WebSphe

48、re MQ 隊列設(shè)置選項; 為獲取消息打開應(yīng)用程序; 設(shè)置選項,從應(yīng)用程序隊列獲取消息; 創(chuàng)建消息緩沖區(qū); 從隊列獲取消息到消息緩沖區(qū); 從消息緩沖區(qū)讀取用戶數(shù)據(jù)并在控制臺上顯示。 以下程序PtpReceiver.java 就是將從應(yīng)用程序隊列上獲取消息的接收應(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 屬性以便客戶機連接*/ MQEnvironment.hostname = hostName ; MQEnvironment.channel = channel ; MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_WEBSPHERE MQ); /*連接到隊列管理器*/

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

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

52、3000 ; /*創(chuàng)建MQMessage 類*/ MQMessage inMsg = new MQMessage(); /*從隊列到消息緩沖區(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)閉隊列和隊列管理器

53、對象*/ 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請求/回復(fù)

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

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

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

57、回復(fù)消息在獲取調(diào)用上使用確定的等待時間。等待間隔可以設(shè)為系統(tǒng)所允許的等待回復(fù)的最大時間。 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 屬性以便客戶機連接*/ MQEnvironment.hostname = hostName ; MQEnvironment.channel = channel ; MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_WEBSPHERE MQ); /*連接到隊列管理器*/ MQQueueManager qMgr

59、 = new MQQueueManager(qManager) ; /*設(shè)置打開選項以便打開用于輸出的隊列,如果隊列管理器停止,我們也已設(shè)置了選項去應(yīng)對不成功情況*/ int openOptions = MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING ; /*打開打開隊列*/ MQQueue queue = qMgr.accessQueue(requestQueue, openOptions, null, null, null); /*設(shè)置放置消息選項,我們將使用默認(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); /*在隊列上放置消息*/ queue.put(outMsg, pmo); /*提交事務(wù)*/ qMmit(); System.out.println(" The message has

62、 been Successfully put\n"); /*關(guān)閉請求隊列*/ queue.close(); /*設(shè)置打開選項以便隊列響應(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(); /*在同步點控制下獲取消息*/ 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ù)碼相機大獎等您拿! 眼鏡蛇的崛起:參與即有機會獲取精美禮品! 5# 大 中 小 發(fā)表于 2009-1-7 12:39 只看該作者 1.5.4回復(fù)應(yīng)用程序 回復(fù)器應(yīng)用程序Responder.java 處理來自請求隊列的請求

66、消息并發(fā)送回復(fù)到請求應(yīng)用程序指定的請求隊列上。 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 屬性以便客戶機連接*/ MQEnvironment.hostname = hostName ; MQEnvironment.channel = channel ; MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(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

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


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