天天看點

java ibm mq 連接配接池_MQ--API總結

研究MQ很長時間了, 每個類,方法,都查了很長時間,在此總結一下!

Java編寫通路MQ的程式

1、MQQueueManager―――隊列管理器通路類

常用方法:

public MQQueueManager(String queueManagerName)―――建立一個管理器執行個體

建立隊列管理器有兩種方式:

1:綁定方式,這種方式要求MQ伺服器與應用程式同屬一台伺服器,效率比較高。

2:客戶機方式:這種方式應用程式和MQ伺服器可以不在同一台伺服器上,但是要考慮到MQ權限的問題,尤其是MQ7.5之後,權限變的很複雜,慎重對待。

注:如果使用綁定的方式則可以直接建立一個新的隊列管理器執行個體。但是在某些平台下這樣直接建立會出錯,必須采用MQClient的方式進行連接配接。此時需要先定義服務通道,端口,服務名等環境變量,再建立一個隊列管理器執行個體。如:

MQEnvironment.hostname = "IP位址";

MQEnvironment.channel = "channelname";

MQEnvironment.port = port ;

MQEnvironment.CCSID = CCSID;

MQQueueManager qMgr = new MQQueueManager(hostname);

其中hostname表示隊列管理器所在的機器位址(一般在本地則填localhost或127.0.0.1)。

port就是隊列管理器的偵聽端口。

Channel定義通路的伺服器通道名(需要自己在隊列管理器中先定義,其方法類似與一般通道的定義,不過類型是伺服器通道)

public bool isConnected()―――傳回隊列管理器是否在連接配接狀态

public synchronized void disconnect()―――斷開隊列管理器的連接配接

2、MQQueue―――隊列通路類

常用方法:

通常MQQueue執行個體的生成通過調用MQQueueManager的accessQueue方法類執行個體化。

public synchornized MQQueue accessQueue(String QueueName,int openOptions)―――傳回一個連接配接隊列的執行個體(類名為:MQQueue)

常用方法:

public synchronized void get(MQMessage message,MQGetMessageOptions gmo)―――從隊列管理器讀取一條

消息通過message執行個體傳回。MQGetMessageOptions的用法下面再詳述。

public synchronized void put(MQMessage message,MQPutMessageOptions pmo)―――往隊列管理器放入一條

消息 MQPutMessageOptions的用法下面再詳述

public synchronized void close()―――關閉隊列的連接配接

3.openOptions---隊列的打開方式

常用值有:

MQC.MQOO_FAIL_IF_QUIESCING―――如果隊列管理器停止則傳回失敗

MQC.MQOO_OUTPUT――――以寫方式打開隊列

MQC.MQOO_INPUT_AS_Q_DEF―――以隊列預設讀取方式打開隊列 使用的時候可以采用與操作來實作多種打開隊列方式,

MQC.MQOO_BROWSE;――――以浏覽方式打開隊列

MQC.MQGMO_BROWSE_NEXT; ――――浏覽下一個消息

如:

int openOptions = MQC.MQOO_FAIL_IF_QUIESCING | MQC.MQOO_OUTPUT | MQC.MQOO_INPUT_AS_Q_DEF; 表示以讀、寫方式打開隊列

4.MQMessage―――消息操作類 常用方法:

public MQMessage()―――預設構造函數

public int getDataLength()―――傳回可讀取的消息的長度(以byte作為機關)

public void readFully(byte b[])―――讀取消息到數組b中,長度以b的數組長度為準

屬性:

format = MQC.MQFMT_STRING;

msg.characterSet = ccsid;//字元集

msg.encoding = ccsid;//寫的字元集

一般讀取消息的操作為:

MQMessage message = new MQMessage(); ….

int length = message.getDataLength();

byte buffer[] = new byte[length];

message.readFully(buffer);

public void write(byte b[])―――把指定的位元組數組寫入消息

一般寫消息的操作為:

byte[] buffer = “asdasdad”.getBytes();

MQMessage message = new MQMessage(); ….

message.write(buffer);

queue.put(message….

5.MQGetMessageOptions―――取消息操作選項

常用方法:

public MQGetMessageOptions()―――預設構造函數

public int options―――操作選項(位操作)

public int matchOptions―――條件選項(按照某種條件擷取消息)

public int waitInterval―――等待時長(機關:毫秒)僅當options選項有MQC.MQGMO_WAIT才有效

6.MQPutMessageOptions―――放消息操作選項

常用方法:

public MQPutMessageOptions()―――預設構造函數

public int options―――操作選項(位操作)

7.MQ自帶連接配接池

MQ隊列管理器有自己的連接配接池,可以使用連接配接池獲得連接配接

我們可以使用的MQ自己的預設連接配接池

MQPoolToken token=MQEnvironment.addConnectionPoolToken();

這樣就會把在本線程中對隊列管理器的連接配接納入到了MQ自帶的線程管理機制中(qm.disconnect()實際上就是将qm的連接配接重新放回池中 qm= new MQQueueManager()會去池裡找一個可用的連接配接賦給qm)

因為隊列管理器是選擇了偵聽端口,可以使用netstat -an |grep 9004 看到連接配接到這個隊列管理器上連接配接.