一個隊列管理器可以有多個隊列和多個通道。
隊列管理器相當於RabbitMQ中的虛擬主機。
隊列分爲本地隊列,遠程隊列,傳輸隊列。
通道分爲發送通道、接收通道、服務器通道等等。
發送到本地隊列上的消息存儲在本機上。
發送到遠程隊列上的消息,通過綁定傳輸隊列傳輸到別的隊列管理器上的本地隊列上存儲。
通道爲消息進出隊列的渠道橋樑,發送通道只能出,接收通道只能進,服務器通道可以進出。
本地例子:
發送消息===>Java程序===>服務器通道===>本地隊列===>服務器通道===>Python程序===>收到消息
兩家公司各自服務器AB例子:
公司A發送消息===>Java程序===>服務器通道A===>遠程隊列A>>>>傳輸隊列A>>>>發送通道A>>>>接收通道B>>>>本地隊列B===>服務器通道B===>Python程序===>公司B收到消息===>響應===>響應消息發送===>Python程序===>服務器通道B===>遠程隊列B>>>>傳輸隊列B>>>>發送通道B>>>>接收隊列A>>>>本地隊列A===>服務器通道A===>Java程序===>公司A收到響應消息
本地隊列:無需綁定任何東西,直接定義聲明即可。
#本地隊列名稱
export QueueName=QUEUE_TEST
#是否持久化
export PERSIST=YES
# NO 該隊列上的消息在隊列管理器重新啓動時丟失。
# YES 該隊列上的消息在隊列管理器重新啓動時保存了下來。
#消息最大深度
export MAXDEPTH=10000
#消息大小
export MAXMSGL=4M
#隊列管理器MAXMSGL,默認值:4M,可以調整範圍:32K - 100M;
#通道MAXMSGL,默認值:4M,可以調整範圍:0-隊列管理器MAXMSGL;
#隊列MAXMSGL,默認值:4M,可以調整範圍:0-隊列管理器MAXMSGL;
#描述
export LocalNodeDes=測試隊列
#隊列管理器名稱
export QmgrName
echo "DEFINE QLOCAL($QueueName) LIKE(SYSTEM.DEFAULT.LOCAL.QUEUE) USAGE(NORMAL) REPLACE DEFPSIST($PERSIST) MAXDEPTH($MAXDEPTH) MAXMSGL($MAXMSGL) DESCR('$LocalNodeDes')"|runmqsc $QmgrName
服務器通道:主要給java、C、python等程序訪問收發數據,也無需綁定任何東西,直接聲明。
#通道名稱
export ChannelName=DC.SVRCONN
#協議類型
export TRPTYPE=TCP
#授權用戶
export MqmUsr=mqm
#消息大小
export MAXMSGL=4M
#隊列管理器MAXMSGL,默認值:4M,可以調整範圍:32K - 100M;
#通道MAXMSGL,默認值:4M,可以調整範圍:0-隊列管理器MAXMSGL;
#隊列MAXMSGL,默認值:4M,可以調整範圍:0-隊列管理器MAXMSGL;
echo "DEFINE CHANNEL($ChannelName) CHLTYPE(SVRCONN) TRPTYPE($TRPTYPE) MCAUSER('$MqmUsr') MAXMSGL($MAXMSGL) REPLACE"|runmqsc $QmgrName
接收通道:
echo "DEFINE CHANNEL($ReceiverChannel) CHLTYPE(RCVR) TRPTYPE($TRPTYPE) REPLACE MAXMSGL($MAXMSGL) HBINT($HBINT) NPMSPEED(NORMAL) MSGEXIT ('$RCVRMSGEXIT') SSLPEER('$SSLPEER') DESCR('To Tips System Online receive Message Channel')"|runmqsc $QmgrName
發送通道:需綁定接收方隊列管理器所在的主機地址和開放的監聽端口,並綁定相應的傳輸隊列。
echo "DEFINE CHANNEL($SendChannel) CHLTYPE(SDR) CONNAME('$RemoteHostName($RemoteHostPort)') LOCLADDR('$LOCLADDR') XMITQ('$TransportQueue') TRPTYPE($TRPTYPE) REPLACE MAXMSGL($MAXMSGL) DISCINT($DISCINT) HBINT($HBINT) SHORTTMR($SHORTTMR) NPMSPEED(NORMAL) MSGEXIT ('$SDRMSGEXIT') SSLPEER('$SSLPEER') DESCR('To Tips System Online Send Message Channel')"|runmqsc $QmgrName
傳輸隊列:需綁定相應的發送通道
echo "DEFINE QLOCAL($TransportQueue) LIKE(SYSTEM.DEFAULT.LOCAL.QUEUE) USAGE(XMITQ) REPLACE DEFPSIST(NO) MAXDEPTH($MAXDEPTH) MAXMSGL($MAXMSGL) TRIGGER TRIGTYPE(FIRST) INITQ(SYSTEM.CHANNEL.INITQ) TRIGDATA($SendChannel) TRIGDPTH(1) DESCR('To Tips System Online Transfer Queue')"|runmqsc $QmgrName
遠程隊列:需綁定相應的傳輸隊列
echo "DEFINE QREMOTE($RemoteQueue) LIKE(SYSTEM.DEFAULT.REMOTE.QUEUE) RNAME('L.$RemoteNodeCode.$AreaNodeCode') RQMNAME('QM_SZZHCZ_1_'$RemoteNodeCode'_01') XMITQ($TransportQueue) DEFPSIST(YES) DESCR('$RemoteNodeDes') REPLACE"|runmqsc $QmgrName