WebSphere MQ 入門指南


WebSphere MQ 入門指南
這是一篇入門指南。我們從最基本的概念說起;

基礎概念

對於MQ,我們需要知道4個名詞:隊列管理器、隊列、消息、通道;對於編程設計人員,通常更關心消息和隊列,對於維護管理人員,通常 會更關心隊列管理器和通道。
如果我們把隊列管理器比作是數據庫,那么隊列就是其中的一張表,消息就是表中的一條記錄。

  1. 隊列:我們可以簡單地把隊列看成一個容器,用於存放消息。

  2. 隊列管理器:隊列管理器構建了獨立的 MQ 的運行環境,它是消息隊列的管理者,用來維護和管理消息隊列。

  3. 消息:MQ中的最小對象;默認情況下,消息缺省可以達到 4MB。消息可以分成持久消息和非持久消息。所謂“持久”的 意思,就是在MQ 隊列管理器重啟動后,消息是否仍然能保持。持久的消息寫入或讀出隊列的同時會在 Log 中記錄,所以性能上比非持久消息差不少。

  4. 通道:通道則是兩個隊列管理器之間的一種單向的點對點的通信連接, 消息在通道中只能單向流動。隊列管理器之間的通信是通過配置通道來實現 的,通道兩側的隊列管理器對這個通道的相關參數應該能對應起來。在通道上可以配置不同的通信協議,這樣就使得編程接口與通信協議無關。通道兩端的 配置必須匹配,且名字相同,否則無法連通。

  5. RUNMQSC:命令行交互界面管理工具;作為維護人員的我們,與MQ打交道有兩種方式,一種是通過MQ提供的二進制命令工具(在mq安裝目錄的bin目錄下),另一種方式則是通過命令行交互管理工具;這二者在功能上有很多是重合的,但並非完全可替代;
    RUNMQSC是一個通用的 MQ 對象管理工具,使用 MQSC命令集可以對 MQ 對象進行
    全方位的管理,也是各種管理方式最直接、最全面的一種。
    RUNMQSC 運行的命令集稱為 MQSC (MQ Script Command)";在 RUNMQSC 中大小寫無關,所有的命令會先轉換成全大寫再提交執行。所以如果要 表示大小相關的字串,比如對象名,則用引號將字串包住。
    輸入以下命令啟動MQSC命令:runmqsc [queueManagerName]

ok,概念介紹完了,下面就是通過示例來學習如何使用他們;
首先,我們需要創建隊列管理,用來存放隊列。有了隊列管理器后,就可以創建隊列;隊列創建了,就可以用來放入和取出消息;

創建隊列管理器

eg:創建一個名為QM_MEMDB的隊列管理器:

crtmqm -q QM_MEMDB
>Directory '/var/mqm/qmgrs/QM_MEMDB' created.

所有創建的隊列管理器在/var/mqm/qmgrs目錄下都會有對應文件名的子目錄生成;
(至於為什么是/var/mqm,這個配置在安裝目錄下的mq配置文件中配置samp/mqs.ini)
從這里我們可以確定,隊列管理器的創建是一個持久化的操作,當MQ服務器停止后再啟動時,隊列管理器都還是存在的;

啟動隊列管理器

啟動名為QM_MMEDB的隊列管理器:

/opt/mqm/bin$./strmqm QM_MEMDB
>WebSphere MQ queue manager 'QM_MEMDB' started using V7.5.0.0.

(停止mq隊列管理器:endmqm)

創建隊列

隊列及消息屬於MQ的對象,MQ的對象管理一般使用mqsc命令交互工具來管理;
對於創建隊列的操作,最好先寫好放在一個文件里,然后調用;
eg,我們在隊列管理器QM_MEMDB中定義一個TEST1隊列:

vi define_memdb.tst:
define qlocal (TEST1) DEFPSIST(YES) MAXDEPTH(150000)

然后調用mqsc來創建:

/var/mqm/sh$runmqsc QM_MEMDB < define_memdb.tst > out.txt

創建的結果信息輸出到out.txt:

1 : define qlocal (TEST1) DEFPSIST(YES) MAXDEPTH(150000)
AMQ8006: WebSphere MQ queue created.
One MQSC command read.
No commands have a syntax error.
All valid MQSC commands were processed.

向隊列中放入消息

基本隊列操作命令分成兩類, 一類在 MQ Server 端運行, 它們是 amqsput、 amqsget、
amqsbcg。另一類在 MQ Client 端運行,它們是 amqsputc、amqsgetc、amqsbcgc
從Server端將消息放入隊列的命令格式:

amqsput   amqsput  QueueName [QueueManagerName]  

amqsput和 amqsputc 可以將消息放入隊列中, 程序把之后的每一行標准輸入作為一條獨立的消息,讀到 EOF 或空行時退出。注意,UNIX 上的 EOF 為 Ctrl+D。可以將標准輸入重定向到文件。隊列中每放入一條消息,隊列深度增加一。
eg:

/var/mqm/sh$amqsput TEST1 QM_MEMDB

查看隊列中放入的消息

查看隊列管理器QM_MEMDB中名為TEST1的隊列:

/var/mqm/sh$amqsbcg TEST1 QM_MEMDB

從隊列中取出消息

amqsget 和 amqsgetc 可以將消息從隊列中全部讀出並顯示。讀空后再等待 15 秒,在這段時間內如果有新的消息到達會一並讀出。強行中斷該程序用 Ctrl+C 。amqsget 和 amqsgetc 執行后隊列應該為空,即隊列深度為零。

以上是單個服務器的單個隊列管理器中完成的操作,如果需要跨隊列管理器或跨機通信,我們需要MQ命令服務器和MQ監聽器,當然,少不了建立通道;

MQ命令服務器

WebSphere MQ 命令服務器是隊列管理器的一個組件,用來對外來的命令消息進行解釋和執行。在遠程管理和編程管理的應用中,需要啟動命令服務器。一個隊列管理器最多只有一個命令服務器,缺省情況下在創建隊列管理器時由系統一並創建。
啟動與停止:
strmqcsv
endmqcsv
dspmqcsv
啟動后執行下,觀察狀態,看到正在運行:
/opt/mqm/bin$dspmqcsv QM1
WebSphere MQ Command Server Status . . : Running

MQ 監聽器

WebSphere MQ 中監聽器也是隊列管理器的一個組件,用來監聽外來的連接請求並相應
地做出反應。監聽器通常需要先配置,然后才能運行,配置參數與監聽器選擇的通信協議有關。當然,也可以在第一次啟動監聽器時將配置參數傳入,隱式地進行配置。一個隊列管理器可以有多個監聽器,分別應用於不同的通信協議或同一協議的不同參數。比如 TCP/IP 的不同端口。

通道的配置和建立下面單獨拿出來講解;
over。

更多參考

《精通 WebSphere MQ》本書講解的MQ版本為5.3,有些老,不過操作命令都沒有變化;邏輯清晰,還不錯;涉及到MQ的新特性,比如發布/訂閱方面,就不用看這本書了,轉到參考2:
《Application Programming Reference MQV7》

Posted by: 大CC | 03DEC,2013
博客:blog.me115.com
微博:新浪微博


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM