MQ應用程序的開發,簡單的實現一下關鍵的發送消息和接收消息的操作.首先做簡單的準備工作,建隊列管理器QM1,在QM1中建隊列Q1,然後在高級中建立通道BICASHY,類型爲服務器連接通道,端口號1414,這裏做最簡單的配置,死信、傳輸隊列及遠程隊列都暫時不建。。。
注:如果建另一個隊列管理器QM2,其偵聽端口一定不能和1414重複。
- package com.wondertek.flow.test;
- import java.io.IOException;
- import com.ibm.mq.MQC;
- import com.ibm.mq.MQEnvironment;
- import com.ibm.mq.MQException;
- import com.ibm.mq.MQGetMessageOptions;
- import com.ibm.mq.MQMessage;
- import com.ibm.mq.MQPutMessageOptions;
- import com.ibm.mq.MQQueue;
- import com.ibm.mq.MQQueueManager;
- public class MQManager {
- private MQQueueManager qMgr;
- private void getConnMQmanager() {
- MQEnvironment.hostname = "77.20.17.15";// MQ服務器IP
- MQEnvironment.channel = "BICASHY"; // 隊列管理器對應的服務器連接通道
- MQEnvironment.CCSID = 1381; // 字符編碼
- MQEnvironment.port = 1414; // 隊列管理器的端口號
- try {
- qMgr = new MQQueueManager("QM1");// 隊列管理器名稱
- } catch (MQException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- private void closeConnMQmanager() {
- if (qMgr != null) {
- try {
- qMgr.close();
- } catch (MQException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- public void sendMsg(String msgStr){
- int openOptions = MQC.MQOO_INPUT_AS_Q_DEF|MQC.MQOO_OUTPUT|MQC.MQOO_INQUIRE;
- MQQueue queue = null;
- try {
- //建立Q1通道的連接
- queue = qMgr.accessQueue("Q1", openOptions, null, null,null);
- MQMessage msg = new MQMessage();// 要寫入隊列的消息
- msg.format = MQC.MQFMT_STRING;
- msg.characterSet = 1381;
- msg.writeObject(msgStr); //將消息寫入消息對象中
- MQPutMessageOptions pmo = new MQPutMessageOptions();
- msg.expiry = -1; // 設置消息用不過期
- queue.put(msg, pmo);// 將消息放入隊列
- } catch (MQException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }finally{
- if(queue!=null){
- try {
- queue.close();
- } catch (MQException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- }
- public void receiveMsg()
- {
- int openOptions = MQC.MQOO_INPUT_AS_Q_DEF|MQC.MQOO_OUTPUT|MQC.MQOO_INQUIRE;
- MQQueue queue = null;
- try {
- queue = qMgr.accessQueue("Q1", openOptions, null, null,null);
- System.out.println("該隊列當前的深度爲:"+queue.getCurrentDepth());
- System.out.println("===========================");
- int depth = queue.getCurrentDepth();
- //將隊列的裏的消息讀出來
- while(depth-->0)
- {
- MQMessage msg = new MQMessage();// 要讀的隊列的消息
- MQGetMessageOptions gmo = new MQGetMessageOptions();
- queue.get(msg, gmo);
- System.out.println("消息的大小爲:"+msg.getDataLength());
- System.out.println("消息的內容:\n"+msg.readObject());
- System.out.println("---------------------------");
- }
- } catch (MQException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }finally{
- if(queue!=null){
- try {
- queue.close();
- } catch (MQException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- }
- public static void main(String[] args) {
- MQManager mm = new MQManager();
- mm.getConnMQmanager();
- try {
- mm.sendMsg("第一條測試信息");
- mm.sendMsg("test第二條測試信息");
- mm.receiveMsg();
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- mm.closeConnMQmanager();
- }
- }