WebSphere MQ 入門指南
這是一篇入門指南。我們從最基本的概念說起;
基礎概念
對於MQ,我們需要知道4個名詞:隊列管理器、隊列、消息、通道;對於編程設計人員,通常更關心消息和隊列,對於維護管理人員,通常 會更關心隊列管理器和通道。
如果我們把隊列管理器比作是數據庫,那么隊列就是其中的一張表,消息就是表中的一條記錄。
-
隊列:我們可以簡單地把隊列看成一個容器,用於存放消息。
-
隊列管理器:隊列管理器構建了獨立的 MQ 的運行環境,它是消息隊列的管理者,用來維護和管理消息隊列。
-
消息:MQ中的最小對象;默認情況下,消息缺省可以達到 4MB。消息可以分成持久消息和非持久消息。所謂“持久”的 意思,就是在MQ 隊列管理器重啟動后,消息是否仍然能保持。持久的消息寫入或讀出隊列的同時會在 Log 中記錄,所以性能上比非持久消息差不少。
-
通道:通道則是兩個隊列管理器之間的一種單向的點對點的通信連接, 消息在通道中只能單向流動。隊列管理器之間的通信是通過配置通道來實現 的,通道兩側的隊列管理器對這個通道的相關參數應該能對應起來。在通道上可以配置不同的通信協議,這樣就使得編程接口與通信協議無關。通道兩端的 配置必須匹配,且名字相同,否則無法連通。
-
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
微博:新浪微博