天天看點

WebSphere MQ安裝配置,java發送接收消息一.準備工作二.建立MQ隊列管理器,本地隊列,通道三.驗證MQ是否配置成功四.java發送接收消息

一.準備工作

1.IBM WebSphere MQ安裝,給使用者賦權限

參考: http://my.oschina.net/barter/blog/115502

完成WebSphere MQ安裝,給使用者賦權限(不要建立隊列管理器,本地隊列,通道,下邊有建立步驟)

使用者賦權成功如下圖所示:

WebSphere MQ安裝配置,java發送接收消息一.準備工作二.建立MQ隊列管理器,本地隊列,通道三.驗證MQ是否配置成功四.java發送接收消息
WebSphere MQ安裝配置,java發送接收消息一.準備工作二.建立MQ隊列管理器,本地隊列,通道三.驗證MQ是否配置成功四.java發送接收消息

二.建立MQ隊列管理器,本地隊列,通道

指令方式均在windows控制台 C:\Program Files (x86)\IBM\WebSphere MQ\bin> 路徑下執行

1.建立隊列管理器

使用 WebSphere MQ 資料總管:

1.啟動 WebSphere MQ 資料總管。 

2.在“導航器”視圖中,右鍵單擊隊列管理器檔案夾,然後單擊建立 > 隊列管理器。 将打開“建立隊列管理器”向導。 

在隊列管理器名稱字段中,輸入 QM_JACK 。

3.單擊兩次下一步。 確定從選擇隊列管理器啟動類型選項中選擇自動。 

4.單擊下一步。 

5.確定選中建立配置用于 TCP/IP 的偵聽器複選框。 

6.如果完成按鈕不可用,那麼在偵聽端口号字段中輸入另一個端口号。 如果目前值為 1414,那麼嘗試使用另一個端口号,例如:1415 或 1416。如果此階段未使用預設端口号 1414,請記錄所使用的端口号,因為在本教程的後面階段中 QM_JACK 充當接收隊列管理器時将需要此端口号。 

7.單擊完成。

使用 MQSC 建立隊列管理器:

1.通過輸入以下指令,建立名為 QM_JACK 的隊列管理器: 

crtmqm QM_JACK

2.通過輸入以下指令來啟動此隊列管理器: 

strmqm QM_JACK

WebSphere MQ安裝配置,java發送接收消息一.準備工作二.建立MQ隊列管理器,本地隊列,通道三.驗證MQ是否配置成功四.java發送接收消息
WebSphere MQ安裝配置,java發送接收消息一.準備工作二.建立MQ隊列管理器,本地隊列,通道三.驗證MQ是否配置成功四.java發送接收消息

2.建立本地隊列

使用 WebSphere MQ 資料總管:

1.在“導航器”視圖中,展開隊列管理器檔案夾。 

2.展開隊列管理器 QM_JACK 。 

3.右鍵單擊隊列檔案夾,然後單擊建立 > 本地隊列。 将打開“建立本地隊列”向導。 

4.在名稱字段中,輸入 QUEUE_RECV 。 

5.單擊完成。

使用 MQSC 本地隊列:

1.通過輸入以下指令來啟用 MQSC 指令: 

runmqsc QM_JACK

2.輸入以下指令: 

define qlocal(QUEUE_RECV)

此時會顯示消息,告訴您已經建立了隊列和預設 WebSphere MQ 對象。

3.通過輸入以下指令來停止 MQSC: 

end

WebSphere MQ安裝配置,java發送接收消息一.準備工作二.建立MQ隊列管理器,本地隊列,通道三.驗證MQ是否配置成功四.java發送接收消息
WebSphere MQ安裝配置,java發送接收消息一.準備工作二.建立MQ隊列管理器,本地隊列,通道三.驗證MQ是否配置成功四.java發送接收消息

3.建立通道

使用 WebSphere MQ 資料總管:

1.在 QM_JACK隊列管理器右鍵通道

2.建立,伺服器連接配接通道

3.輸入名稱 QUEUE_RECV

4.下一步完成

WebSphere MQ安裝配置,java發送接收消息一.準備工作二.建立MQ隊列管理器,本地隊列,通道三.驗證MQ是否配置成功四.java發送接收消息
WebSphere MQ安裝配置,java發送接收消息一.準備工作二.建立MQ隊列管理器,本地隊列,通道三.驗證MQ是否配置成功四.java發送接收消息

三.驗證MQ是否配置成功

1.發送消息:

amqsput 本地隊列 隊列管理器

amqsput QUEUE_RECV QM_JACK

随便輸入一些消息,然後連敲二次回車,完成消息發送

WebSphere MQ安裝配置,java發送接收消息一.準備工作二.建立MQ隊列管理器,本地隊列,通道三.驗證MQ是否配置成功四.java發送接收消息
WebSphere MQ安裝配置,java發送接收消息一.準備工作二.建立MQ隊列管理器,本地隊列,通道三.驗證MQ是否配置成功四.java發送接收消息

2.接收消息:

amqsget 本地隊列 隊列管理器

amqsget  QUEUE_RECV QM_JACK

WebSphere MQ安裝配置,java發送接收消息一.準備工作二.建立MQ隊列管理器,本地隊列,通道三.驗證MQ是否配置成功四.java發送接收消息
WebSphere MQ安裝配置,java發送接收消息一.準備工作二.建立MQ隊列管理器,本地隊列,通道三.驗證MQ是否配置成功四.java發送接收消息

四.java發送接收消息

java代碼依賴的jar包下載下傳位址: http://download.csdn.net/detail/adam_zs/9617526

package com.ceair.mq;

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;

/**
 * @Title WebSphere MQ 發送/接受消息
 * @Description
 * @author wangzs
 * @date 2016-8-30
 */
public class WebSphereMQ {
	// 定義隊列管理器和隊列的名稱
	private static String hostname = "10.80.63.101"; // MQ伺服器的IP位址
	private static int port = 1414; // MQ端口
	private static int ccsid = 1381; // 伺服器MQ服務使用的編碼1381代表GBK、1208代表UTF
	private static String qmName = "QM_JACK"; // MQ的隊列管理器名稱;
	private static String channel = "CNN_JACK"; // 伺服器連接配接的通道
	private static String qName = "QUEUE_RECV"; // MQ遠端隊列的名稱;
	private static MQQueueManager qMgr;

	// 初始化
	static {
		MQEnvironment.hostname = hostname;
		MQEnvironment.channel = channel;
		MQEnvironment.CCSID = ccsid;
		MQEnvironment.port = port;
		try {
			// 定義并初始化隊列管理器對象并連接配接
			qMgr = new MQQueueManager(qmName);
		} catch (MQException e) {
			System.out.println("初使化MQ出錯");
			e.printStackTrace();
		}
	}

	// 往MQ發送消息
	public static String sendMessage(String message) {
		try {
			// 設定将要連接配接的隊列屬性
			int openOptions = MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING;
			// 連接配接隊列,關閉了就重新打開
			if (qMgr == null || !qMgr.isConnected()) {
				qMgr = new MQQueueManager(qmName);
			}
			MQQueue queue = qMgr.accessQueue(qName, openOptions);
			// 定義一個簡單的消息
			MQMessage putMessage = new MQMessage();
			// 将資料放入消息緩沖區
			putMessage.writeUTF(message);
			// 将消息寫入隊列
			queue.put(putMessage, new MQPutMessageOptions());
			queue.close();
		} catch (MQException ex) {
			ex.printStackTrace();
			System.out.println("A WebSphere MQ error occurred : Completion code " + ex.completionCode + " Reason code "
					+ ex.reasonCode);
		} catch (IOException ex) {
			System.out.println("An error occurred whilst writing to the message buffer: " + ex);
		} catch (Exception ex) {
			ex.printStackTrace();
		} finally {
			try {
				qMgr.disconnect();
			} catch (MQException e) {
				e.printStackTrace();
			}
		}
		return "sendMessage success! {" + message + "}";
	}

	// 從隊列中去擷取消息,如果隊列中沒有消息,就會發生異常
	public static String getMessage() {
		String message = null;
		try {
			// 設定将要連接配接的隊列屬性
			int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT;
			MQMessage retrieve = new MQMessage();
			// 設定取出消息的屬性(預設屬性)
			MQGetMessageOptions 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;// 如果隊列管理器停頓則失敗
			gmo.waitInterval = 1000; // 設定等待的毫秒時間限制
			// 關閉了就重新打開
			if (qMgr == null || !qMgr.isConnected()) {
				qMgr = new MQQueueManager(qmName);
			}
			MQQueue queue = qMgr.accessQueue(qName, openOptions);
			// 從隊列中取出消息
			queue.get(retrieve, gmo);
			message = retrieve.readUTF();
			queue.close();
		} catch (MQException ex) {
			System.out.println("A WebSphere MQ error occurred : Completion code " + ex.completionCode + " Reason code "
					+ ex.reasonCode);
		} catch (IOException ex) {
			System.out.println("An error occurred whilst writing to the message buffer: " + ex);
		} catch (Exception ex) {
			ex.printStackTrace();
		} finally {
			try {
				qMgr.disconnect();
			} catch (MQException e) {
				e.printStackTrace();
			}
		}
		return " getMessage success! {" + message + "} ";
	}
}
           
package com.ceair.mq;

import org.junit.Test;

/**
 * @Title 測試WebSphere MQ 發送/接受消息
 * @Description
 * @author wangzs
 * @date 2016-8-30
 */
public class TestWebSphereMQ {

	@Test
	public void testSendMessage() {
		System.out.println(WebSphereMQ.sendMessage("TestWebSphereMQ hello word!"));
	}

	@Test
	public void testGetMessage() {
		System.out.println(WebSphereMQ.getMessage());
	}

}
           

測試結果:

sendMessage success! {TestWebSphereMQ hello word!}
 getMessage success! {TestWebSphereMQ hello word!}