研究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 看到連接配接到這個隊列管理器上連接配接.