IBM WebSphere MQ 7.5基本用法
一、下載7.5 Trial版本
http://www.ibm.com/developerworks/downloads/ws/wmq/
這是下載網(wǎng)址,下載前先必須注冊(cè)IBM ID,下載完成后一路Next即可(注:windows上安裝時(shí),會(huì)詢問(wèn)是否域環(huán)境,初次學(xué)習(xí)時(shí),為簡(jiǎn)單起見(jiàn),建議選擇No)
安裝完成后,MQ的Bin目錄會(huì)自動(dòng)添加到環(huán)境變量Path中,以后就可以直接用Dos命令行窗口操作(當(dāng)然,也可以用圖形化GUI方式通過(guò)IBM WebSphere MQ Explorer來(lái)管理)
注:安裝時(shí),強(qiáng)烈建議用管理員Administrator身份安裝,否則安裝完成后,有可能license無(wú)法生效、runmqsc命令模式下無(wú)法正常執(zhí)行命令.
?
二、創(chuàng)建隊(duì)列管理器
WIN?+ R鍵,輸入cmd,進(jìn)入命令行窗口,鍵入:
crtmqm QM_TEST
創(chuàng)建一個(gè)隊(duì)列管理器QM_TEST(你可以改成自己想要的名字),如果把整個(gè)MQ理解成一個(gè)數(shù)據(jù)庫(kù)實(shí)例,QM_TEST相當(dāng)于就是db instance中的schema(或user)
命令行創(chuàng)建的隊(duì)列管理器默認(rèn)是不活動(dòng)狀態(tài)的,可以用
strmqm QM_TEST
來(lái)啟動(dòng)隊(duì)列管理器
?
三、創(chuàng)建隊(duì)列
如果說(shuō)“隊(duì)列管理器”是db中的schema,那么"隊(duì)列"就相當(dāng)于db中的Table了,而隊(duì)列中的每條"消息",就相當(dāng)于Table中的每條記錄,繼續(xù)在命令行窗口模式下,輸入
runmqsc QM_TEST
將進(jìn)入MQ的交互命令模式,繼續(xù)輸入
define qlocal(Q1)
將創(chuàng)建一個(gè)本地隊(duì)列Q1(你可以改成自己需要的名字),如果此時(shí)你打開(kāi) "開(kāi)始菜單->程序->IBM WebSphere MQ->WebSphere MQ Explorer (Installation1)"也能同步在圖形界面下,看到這個(gè)隊(duì)列
最后鍵入end,退出MQ的交互命令模式。
?
四、發(fā)送消息
繼續(xù)在Windows命令模式下,輸入
amqsput Q1 QM_TEST
這里系統(tǒng)將處于等待用戶輸入的狀態(tài),隨便輸入一些消息,然后連敲二次回車,完成消息發(fā)送
?
五、接收消息
amqsget Q1 QM_TEST
把剛才的put換成了get,將從隊(duì)列管理器QM_TEST的隊(duì)列Q1中,把消息取出來(lái)
?
六、進(jìn)階指南
熟悉以上命令行操作后,還可以用圖形化的操作方式再?gòu)?qiáng)化一遍(建議還是多用命令行模式,因?yàn)橛行┎僮髦荒苡妹钚型瓿?#xff0c;比如后面要提到的修改隊(duì)列管理器編碼)
WebSphere MQ Explorer中,從"幫助"菜單里調(diào)出幫助文檔,里面有一個(gè)不錯(cuò)的教程,強(qiáng)烈推薦新手看一遍
不過(guò),"教程2:將消息發(fā)送至遠(yuǎn)程隊(duì)列"這里,幫助文檔上有幾個(gè)細(xì)節(jié)沒(méi)講透,導(dǎo)致初次用命令行照著做,可能會(huì)不成功,幾個(gè)要點(diǎn)如下:
1、通道命名問(wèn)題
發(fā)送方與接收方的通道名稱,必須一樣,這樣二邊才能對(duì)應(yīng)起來(lái)
2、接收方必須要有偵聽(tīng)器,而且要處于激活狀態(tài)
3、發(fā)送方的發(fā)送通道中,連接名稱格式為:"<接收方HostName或IP地址>(接收方-隊(duì)列管理器-偵聽(tīng)器的TCP端口) ,不包括"<>“,比如比如:yangjm(1514)或172.12.134.14(1514)
4、發(fā)送方的發(fā)送通道必須處于激活狀態(tài),如果通道啟動(dòng)失敗,嘗試右鍵->ping/復(fù)位,如果還不行,檢查上述要點(diǎn)1-3是否設(shè)置有問(wèn)題
?
七、遠(yuǎn)程連接問(wèn)題
圖形方式添加“遠(yuǎn)程隊(duì)列管理器”時(shí),如果遠(yuǎn)程隊(duì)列也是7.x或以上版本,當(dāng)前登錄用戶是管理員時(shí),將提示權(quán)利不足,拒絕連接,原因是7.0以上,MQ提高了安全性,會(huì)默認(rèn)攔截管理員,詳情可參考IBM上的解釋 http://www-01.ibm.com/support/docview.wss?uid=swg21636532
解決方式:
1. 更換當(dāng)前用戶,建一個(gè)mqm用戶組(MQ安裝后,會(huì)默認(rèn)創(chuàng)建該Windows用戶組)的用戶,然后以該用戶身份登錄操作
2.參考IBM上的解釋,如果出于學(xué)習(xí)目的,最簡(jiǎn)單的做法,就是在runmqsc交互模式下,鍵入
ALTER QMGR CHLAUTH(DISABLED)? 直接關(guān)閉通道認(rèn)證(生產(chǎn)環(huán)境不推薦這么做)
?
另外,要想本機(jī)上的隊(duì)列能被遠(yuǎn)程管理,前提是該隊(duì)列管理器允許遠(yuǎn)程管理,操作方式:隊(duì)列管理器上右擊->選擇"遠(yuǎn)程管理...",接下來(lái)的事情大家都知道
?
八、字符集編碼問(wèn)題
每 個(gè)隊(duì)列管理器,都有一個(gè)CCSID的屬性,對(duì)應(yīng)的就是字符集編碼,在windows系統(tǒng)中,這個(gè)編碼應(yīng)該是1381,如果你是用其它OS(比如 linux)的配置通過(guò)腳本導(dǎo)入MQ的,可能編碼就不是1381了,這會(huì)導(dǎo)致在windows上無(wú)法連接\啟動(dòng)隊(duì)列管理器,可以通過(guò)MQ交互命令行修改,
runmqsc QM_TEST 進(jìn)入QM_TEST的MQ交互模式
DISPLAY QMGR CCSID 查看當(dāng)前的CCSID屬性
ALTER QMGR CCSID(1381) 修改字符集編碼為1381
?
九、如何從“試用版”升級(jí)成“正式版”
試用版默認(rèn)只能用90天,到期后,如果購(gòu)買了正式版的license,可以通過(guò)命令行導(dǎo)入license,命令如下:
setmqprd x:\license\amqpcert.lic
注:amqpcert.lic中的P即代表這是Product生產(chǎn)版本,setmqprd 后面的路徑即為license文件的所在路徑
?
十、java連接示例代碼?
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;/** 可以在MQ的資源管理器的某一個(gè)隊(duì)列上放入測(cè)試消息、瀏覽消息等* 可以放入多條消息,按先進(jìn)先出的方式取得*/ public class MQTest {private String qManager;// QueueManager名private MQQueueManager qMgr;private MQQueue qQueue;String HOST_NAME;int PORT = 0;String Q_NAME;String CHANNEL;int CCSID;String Msg;public void init() {try {HOST_NAME = "yangjm";//Hostname或IPPORT = 1414;//要有一個(gè)偵聽(tīng)器,處于活動(dòng)狀態(tài),且監(jiān)聽(tīng)1414端口qManager = "QM_APPLE";Q_NAME = "Q1";//Q1是一個(gè)本地隊(duì)列CHANNEL = "DC.SVRCONN";//QM_APPLE上要建一個(gè)名為DC.SVRCONN的服務(wù)器連接通道CCSID = 1381; // 表示是簡(jiǎn)體中文,// CCSID的值在AIX上一般設(shè)為1383,如果要支持GBK則設(shè)為1386,在WIN上設(shè)為1381。 MQEnvironment.hostname = HOST_NAME; // 安裝MQ所在的ip addressMQEnvironment.port = PORT; // TCP/IP port MQEnvironment.channel = CHANNEL;MQEnvironment.CCSID = CCSID;qMgr = new MQQueueManager(qManager);int qOptioin = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_INQUIRE| MQC.MQOO_OUTPUT;qQueue = qMgr.accessQueue(Q_NAME, qOptioin);} catch (MQException e) {System.out.println("A WebSphere MQ error occurred : Completion code "+ e.completionCode + " Reason Code is "+ e.reasonCode);}}void finalizer() {try {qQueue.close();qMgr.disconnect();} catch (MQException e) {System.out.println("A WebSphere MQ error occurred : Completion code "+ e.completionCode + " Reason Code is "+ e.reasonCode);}}/** 取過(guò)一次,下次就沒(méi)有了*/public void GetMsg() {try {MQMessage retrievedMessage = new MQMessage();MQGetMessageOptions gmo = new MQGetMessageOptions();gmo.options += MQC.MQPMO_SYNCPOINT;qQueue.get(retrievedMessage, gmo);int length = retrievedMessage.getDataLength();byte[] msg = new byte[length];retrievedMessage.readFully(msg);String sMsg = new String(msg);System.out.println(sMsg);} catch (RuntimeException e) {e.printStackTrace();} catch (MQException e) {if (e.reasonCode != 2033) // 沒(méi)有消息 {e.printStackTrace();System.out.println("A WebSphere MQ error occurred : Completion code "+ e.completionCode+ " Reason Code is "+ e.reasonCode);}} catch (java.io.IOException e) {System.out.println("An error occurred whilst to the message buffer "+ e);}}public void SendMsg(byte[] qByte) {try {MQMessage qMsg = new MQMessage();qMsg.write(qByte);MQPutMessageOptions pmo = new MQPutMessageOptions();qQueue.put(qMsg, pmo);System.out.println("The message is sent!");System.out.println("\tThe message is " + new String(qByte, "GBK"));} catch (MQException e) {System.out.println("A WebSphere MQ error occurred : Completion code "+ e.completionCode + " Reason Code is "+ e.reasonCode);} catch (java.io.IOException e) {System.out.println("An error occurred whilst to the message buffer "+ e);}}/*** @param args*/public static void main(String[] args) {MQTest mqst = new MQTest();mqst.init();try {mqst.SendMsg("你好,Webshpere MQ 7.5!".getBytes("GBK"));mqst.GetMsg();} catch (Exception e) {e.printStackTrace();}mqst.finalizer();}}?
?需要引用的jar包(在MQ的安裝目錄下都有)
附示例源代碼下載地址: http://pan.baidu.com/s/1qWrs9iO
?
?十一、機(jī)器之間遷移
如果要在多臺(tái)機(jī)器上配置相同的隊(duì)列管理器,一臺(tái)臺(tái)機(jī)器去創(chuàng)建、設(shè)置十分繁瑣,可以用命令
dmpmqcfg -m?QM_TEST -A > C:\SCRIPT\QM_TEST_SCRIPT.DUMP
注:其中QM_TEST即為要導(dǎo)出的隊(duì)列管理器名稱,而 "QM_TEST_SCRIPT.DUMP"是導(dǎo)出腳本的文件名,可以隨便修改,執(zhí)行完后會(huì)在"C:\SCRIPT\"下生成一個(gè)“.dump”的腳本文件,這里我們借用了管道操作符號(hào)">"
在另一臺(tái)機(jī)器上,先把dump文件復(fù)制過(guò)去(比如就放在c盤(pán)根目錄下),然后按下列步驟執(zhí)行
crtmqm QM_TEST
strmqm QM_TEST
runmqsc QM_TEST < C:\QM_TEST_SCRIPT.DUMP > C:\QM_TEST_SCRIPT.OUT
這表示runmqsc命令將對(duì) QM_TEST操作,操作的命令來(lái)源于腳本文件 C:\QM_TEST_SCRIPT.DUMP,而執(zhí)行結(jié)果會(huì)輸出到 C:\QM_TEST_SCRIPT.OUT
?
本文轉(zhuǎn)自:http://www.cnblogs.com/yjmyzz/p/3505325.html
轉(zhuǎn)載于:https://www.cnblogs.com/Rozdy/p/4877324.html
總結(jié)
以上是生活随笔為你收集整理的IBM WebSphere MQ 7.5基本用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 花呗额度25000高不高 日常使用后要按
- 下一篇: 面向对象(四)