IBM WebSphere MQ安裝及配置詳解

  1. 打開MQ安裝程序,選擇下一步,默認安裝WebSphere MQ,html

    IBM WebSphere MQ安裝及配置詳解
    IBM WebSphere MQ安裝及配置詳解
  2. 完成MQ的安裝工做,啓動WebSphere MQ,服務器

    IBM WebSphere MQ安裝及配置詳解
    IBM WebSphere MQ安裝及配置詳解
  3. 服務器配置,選擇新建隊列管理器,建立名爲 "mq"的隊列管理器,其餘選項默認不變,點"下一步"併發

    IBM WebSphere MQ安裝及配置詳解
    IBM WebSphere MQ安裝及配置詳解
  4. 容許在 TCP/IP上進行隊列管理器的遠程管理,點擊"下一步",完成MQ隊列管理器的建立。tcp

    IBM WebSphere MQ安裝及配置詳解
  5. 新建本地隊列,在mq下建立名爲"MQ_send"的本地隊列(用戶能夠根據本身的需求更改本地隊列的名字和數量),其餘選項默認便可。工具

    IBM WebSphere MQ安裝及配置詳解
    IBM WebSphere MQ安裝及配置詳解
  6. 在 mq下建立名爲"MQ_CHL"的服務器通道,其餘選項默認便可。測試

    IBM WebSphere MQ安裝及配置詳解
    IBM WebSphere MQ安裝及配置詳解
  7. 在 MQ服務器端的計算機用戶中添加MQ客戶端所在計算機的系統用戶。例如:個人MQ客戶端所在的計算機用戶名爲Administrator,則在服務器端系統中添加名爲"Administrator"的用戶。具體步驟以下:3d

    <1>點擊 "開始"->"控制面板"->"管理工具"->"計算機管理"->"本地用戶和組"->"用戶",選擇Administrator點右鍵,打開屬性面板,選擇「隸屬於」把mqmt添加進去。以下圖所示:unix

    (若是客戶端計算機使用的其餘的用戶名,在服務器端新建一個用戶名,一樣操做,把用戶名添加隸屬於mqm組裏面)htm

    IBM WebSphere MQ安裝及配置詳解
    IBM WebSphere MQ安裝及配置詳解
    IBM WebSphere MQ安裝及配置詳解
     
    注意:
    1. 客戶端鏈接MQ服務出現2035錯誤MQRC_NOT_AUTHORIZEDblog

      IBM WebSphere MQ安裝及配置詳解
    2.  

      找到mq的安裝目錄下的bin目錄,在cmd環境下執行命令runmqsc 而後執行命令 alter qmgr chlauth(disabled) 把權限驗證下掉就能夠了,以下圖所示:

      IBM WebSphere MQ安裝及配置詳解
    3.  MQ經常使用命令:

      登陸MQI,通常是cd到MQ安裝目錄下bin,而後切換mqm帳戶,mqm帳戶是mq默認的管理員帳戶。可使用命令dspmq 查看隊列管理器機器狀態,若服務未啓動,可以使用strmqm命令啓動服務(注:隊列管理器名稱是分區大小寫的),而後執行runmqsc 隊列管理器,便可登陸到MQI。

       

      查詢CCSID可使用命令:display qmgr,查看ccsid屬性便可。

      查詢Listener監聽端口,可以使用DISPLAY LSSTATUS(*) ALL。查看port屬性便可。

      --查看MQ版本--

      dspmqver

      --查看隊列狀態--
      dspmq

      --建立隊列管理器--
      crtmqm -q ECIS_QM

      --刪除隊列管理器--
      dltmqm ECIS_QM

      --啓動隊列管理器--
      strmqm ECIS_QM

      --關閉隊列管理器--
      endmqm -i ECIS_QM 當即中止
      endmqm -p ECIS_QM 強制中止

      --運行隊列管理器--
      runmqsc ECIS_QM

      --定義監聽器--
      DEFINE LISTENER(LSR_4_ECIS_QM) TRPTYPE(TCP) PORT(1616) CONTROL(QMGR) REPLACE
      START LISTENER(LSR_4_ECIS_QM)

      --定義通道--
      DEFINE CHANNEL(ECIS.SVRCONN) CHLTYPE(SVRCONN) MCAUSER('mqm') REPLACE

      --啓動通道--
      runmqchl –c ChlName –m ECIS_QM

      --啓動偵聽--
      runmqlsr –t TCP –p 1616 –m ECIS_QM
      endmqlsr -m ECIS_QM

      --定義隊列--
      DEFINE QL(Q_SVC2ADP_4_TELNET) REPLACE
      DEFINE QL(Q_SVC2ADP_4_JDBC) REPLACE
      DEFINE QL(Q_SVC2ADP_4_HTTP) REPLACE
      DEFINE QL(Q_SVC2ADP_4_SOCKET) REPLACE

      --刪除隊列--
      delete QL(Q_SVC2ADP_4_TELNET)

      --查看監聽器--
      display listener (LSR_4_ECIS_QM)

      --查看通道--
      dis chs(*)

      --查看通道--
      display ql(*) [all]

      --查看隊列深度--
      display ql(Q_SVC2ADP_4_HTTP) curdepth

      --清除隊列消息--
      clear ql(Q_SVC2ADP_4_HTTP)

      --查看CCSID--
      display qmgr all

      --修改CCSID--
      ALTER QMGR [FORCE] CCSID(5488)

       

      邏輯定義
      ##################################################
      ./JMSAdmin

      DELETE QCF(T_ECIS_QCF)

      DELETE Q(T_ECIS_Q_SVC2ADP_TELNET) 
      DELETE Q(T_ECIS_Q_ADP2SVC_TELNET)
      DELETE Q(T_ECIS_Q_SVC2ADP_JDBC)
      DELETE Q(T_ECIS_Q_ADP2SVC_JDBC)

      DELETE Q(T_ECIS_Q_SVC2ADP_HTTP)
      DELETE Q(T_ECIS_Q_ADP2SVC_HTTP)
      DELETE Q(T_ECIS_Q_SVC2ADP_SOCKET)
      DELETE Q(T_ECIS_Q_ADP2SVC_SOCKET)

      DEFINE QCF(T_ECIS_QCF) DESC() TRAN(CLIENT) HOST(10.151.128.13) QMGR(T_ECIS_QM) CHAN(T_ECIS.SVRCONN) PORT(2626) CCSID(5488)

      DEFINE Q(T_ECIS_Q_SVC2ADP_TELNET) DESC() QMGR(T_ECIS_QM) QUEUE(Q_SVC2ADP_4_TELNET) CCSID(5488)
      DEFINE Q(T_ECIS_Q_ADP2SVC_TELNET) DESC() QMGR(T_ECIS_QM) QUEUE(Q_ADP2SVC_4_TELNET) CCSID(5488)
      DEFINE Q(T_ECIS_Q_SVC2ADP_JDBC) DESC() QMGR(T_ECIS_QM) QUEUE(Q_SVC2ADP_4_JDBC) CCSID(5488)
      DEFINE Q(T_ECIS_Q_ADP2SVC_JDBC) DESC() QMGR(T_ECIS_QM) QUEUE(Q_ADP2SVC_4_JDBC) CCSID(5488)

      DEFINE Q(T_ECIS_Q_SVC2ADP_HTTP) DESC() QMGR(T_ECIS_QM) QUEUE(Q_SVC2ADP_4_HTTP) CCSID(5488)
      DEFINE Q(T_ECIS_Q_ADP2SVC_HTTP) DESC() QMGR(T_ECIS_QM) QUEUE(Q_ADP2SVC_4_HTTP) CCSID(5488)
      DEFINE Q(T_ECIS_Q_SVC2ADP_SOCKET) DESC() QMGR(T_ECIS_QM) QUEUE(Q_SVC2ADP_4_SOCKET) CCSID(5488)
      DEFINE Q(T_ECIS_Q_ADP2SVC_SOCKET) DESC() QMGR(T_ECIS_QM) QUEUE(Q_ADP2SVC_4_SOCKET) CCSID(5488)

       

       

       

       


      WebSphere MQ經常使用命令及配置
      ################################################## 
      //建立本地隊列Q
      DEFINE   QLOCAL (Q)
      //將本地隊列Q 的最大深度設置爲5
      ALTER QLOCAL (Q) MAXDEPTH(5)
      //從新建立本地隊列Q 若是Q已經存在,則將其所有屬性重置爲缺省屬性
      DEFINE QLOCAL (Q) REPLACE
      //建立遠程隊列
      DEFINE QREMOTE(QRNAME) RNAME(AAA) RQMNAME(QMGRNAME) XMITQ(QTNAME)
      //建立傳輸隊列
      define qlocal(CLV_HQ_TRAN) usage(xmitq) INITQ(SYSTEM.CHANNEL.INITQ) TRIGDATA(REV_CLV) TRIGTYPE(EVERY) TRIGGER REPLACE
      //建立接收端通道C
      DEFINE CHANNEL(C) CHLTYPE(RCVR)
      //建立發送方通道C ,鏈接對方的IP爲10.10.10.10  端口爲1414 通道鏈接的傳輸隊列爲XQ
      DEFINE CHANNEL(C) CHLTYPE(SDR) CONNAME(’10.10.10.10 (1414)’) XMITQ(XQ)
      //建立請求方通道
      DEFINE CHANNEL(D) CHLTYPE(RQSTR) CONNAME(’10.10.10.10 (1414)’)
      //建立服務器通道
      DEFINE CHANNEL (D) CHLTYPE(SVR) xmitq (XQ1)
      //建立服務器鏈接通道
      DEFINE CHANNEL(E) CHLTYPE(SVRCONN)  REPLACE

      //顯示全部遠程隊列
      display qremote (*)
      //顯示全部通道
      Display channel (*)

      //定義死信隊列
      DEFINE QLOCAL(QUEUE) DEFPSIST(YES) REPLACE

      //設定隊列管理器的死信隊列
      ALTER QMGR DEADQ(QUEUE)

      設置MaxChannels和MaxActiveChannels屬性(最大鏈接數)
      ##################################################
      MaxChannels和MaxActiveChannels分別表明隊列管理器容許配置的通道的最大個數和容許同時運行的通道的個數,MaxChannels的缺省值是100,MaxActiveChannels的缺省值與MaxChannels相同。若是您的併發通道鏈接個數超過了100,您須要修改這兩個參數。這對於大併發的Client/Server間通信尤其重要。
      在unix平臺,修改qm.ini文件,添加以下所示(路徑:/var/mqm/qmgrs/HQ_SVR): 
      Channels:
      MaxChannels = 3000   (最大通道數)
      MaxActiveChannels = 3000   (最大活動通道數)
      PipeLineLength=2
      AdoptNewMCA=ALL
      而後重啓MQ

       

       

       

       


      //定義持久性隊列:
      DEFINE QLOCAL(QNAME) DEFPSIST (YES) REPLACE

      傳輸隊列管理
      ##################################################
      1:定義傳輸隊列
      DEFINE QLOCAL(Q_TRANSFER) USAGE(XMITQ)
      注:
      Q_TRANSFER:傳輸隊列名

      下面定義一個輸入隊列並帶觸發器
      DEFINE QLOCAL(Q_TRANSFER) USAGE(XMITQ) DEFPSIST(YES)  INITQ(SYSTEM.CHANNEL.INITQ) TRIGDATA(DP_RCHANNEL) REPLACE
      注:
      參數1:傳輸隊列名稱(Q_TRANSFER)
      參數5:觸發器數據(DP_RCHANNEL),也就是觸發後要啓動的通道。

      2:在傳輸入隊列上定義觸發器
      DPCIS_Q_TRANSFER:傳輸隊列
      觸發器數據:DP_RCHANNEL,即:發送通道,觸發時啓動該通道
      alter qlocal(DPCIS_Q_TRANSFER) TRIGDATA('DP_RCHANNEL') TRIGTYPE(every) TRIGGER initq('SYSTEM.CHANNEL.INITQ')

      遠程隊列管理
      ##################################################
      經過輸入如下命令來定義遠程隊列定義:
      define qremote(Q1) rname(Q1) rqmname(QM_APPLE) xmitq(QM_APPLE)
      注:
      參數1:隊列名稱(發送方遠程隊列名)
      參數2:遠程隊列(接收方的本地接收隊列名)
      參數3:遠程隊列管理器(接收方隊列管理器名)
      參數4:傳輸隊列(發送方傳輸隊列名)

      通道管理
      ##################################################
      1:建立接收方通道
      DEFINE CHANNEL(SDR_ TEST)  CHLTYPE(RCVR)  REPLACE 
      define channel(Q_R_CHANNEL2) chltype(RCVR) replace
      注:
      參數1:接收方通道名稱
      replace:表示有該通道了替換

      2:建立發送方通道 
      DEFINE CHANNEL(SDRNAME)  CHLTYPE(SDR)  CONNAME (‘100.100.100.215(1418)’)  XMITQ(QTNAME)  REPLACE
      其中CHLTYPE能夠是:SDR、SVR、RCVR、RQSTR、CLNTCONN、SVRCONN、CLUSSDR和CLUSRCVR。

      define channel(DP_RCHANNEL) chltype(SDR) conname('10.101.2.3 (1414)') xmitq(Q_TRANSFER) replace
      注:
      通道名稱:DP_RCHANNEL (發送方通道的名稱) 
      傳輸隊列:Q_TRANSFER  (發送方傳輸隊列的名稱)

      3:啓動通道
      start channel(QM_ORANGE.QM_APPLE)

      4:查看通道狀態
      dis chs(*)

      偵聽器管理
      ##################################################
      1:定義偵聽器
      DEFINE LISTENER(TCPLS1) TRPTYPE(TCP) PORT(1414)  REPLACE

      2:啓動偵聽器
      start listener(TCPLS1)
      3:顯示偵聽器信息
      display listener(tcpls1)

      建立觸發
      ##################################################
      通常設置MQ觸發器的目的有兩種, 一是自動啓動發送端通道, 二是監視隊列消息, 一旦發現新的消息, 則利用觸發器啓動相應的處理進程
      若是是利用觸發器自動啓動發送端通道, 使用方法1, 若是是利用觸發器啓動用戶進程, 使用方法2

      方法1
      A 在傳輸通道上設置觸發器, 打開觸發器控制, 類型爲"第一個"
      B 初始隊列爲SYSTEM.CHANNEL.INITQ, 該隊列爲MQ專用的通道啓動隊列, 不須要手工啓動其觸發監視器
      C 觸發器數據爲發送端通道名稱, 例如 QAG.50
      D 在發送端通道不活動的狀況下, 在傳輸通道放入消息測試

      方法2
      A 建立一個觸發啓動隊列, 其模板爲SYSTEM.DEFAULT.INITIATION.QUEUE
      runmqsc
      define qlocal (MQ.TRIGER.INIQUEUE) like (SYSTEM.DEFAULT.INITIATION.QUEUE)
      B 定義進程 所謂進程就是觸發器要觸發的程序本例中進程名稱:TRIGER.PROGRAM 應用程序標識爲:"Notepad.exe"
      C 在隊列上設置觸發器, 通常爲本地隊列, 打開觸發器控制, 類型根據本身的須要選擇"第一個", "每一個" 仍是 "根據消息數量"
      D 初始隊列選擇A中建立的觸發啓動隊列, 例如MQ.TRIGER.INIQUEUE, 進程名稱設置爲B中定義的進程名稱, 例如TRIGER.PROGRAM
      E 啓動觸發監視器 runmqtrm -m QAGWY -q MQ.TRIGER.INIQUEUE
      F 在本地隊列放入消息進行測試

      方法2也能夠完成方法1的工做, 只須要將進程定義中的應用程序標識改成 runmqchl -m QAGWY -c QAG.50 就能夠了, 但MQ中提供了專用的通道啓動隊列,而該隊列不須要手工啓動觸發監視器, 所以方法1比方法2的步驟要少, 配置也簡單, 因此在利用觸發器自動啓動發送端通道的狀況下, 仍是方法1更好.

相關文章
相關標籤/搜索