MQ通道配置
通道是用来连接两个队列管理器的;
在单个队列管理器内读写消息不需要建立通道;但在一个队列管理器中写入消息,而从另一个队列管理器中的队列取出消息,这就需要建立通道; 通道,对跨机和本机的队列管理器不做区分,对于两个队列管理器,不论是否分布在同一个机器上,配置方式都是一样的,所不同的就是ip的地址配置;通道类型
通信双方的通道类型配对并不是可以随意排列组合的,共有六种。(详见《精通MQ》1.2.4 p24)
Sender/Receiver 是所有连接中最简单、最常用的一种。Sender 是通道主动方,也是 消息发送方。 Requester/Server 也是常用的一种连接方式。Requester 是通道主动方,但通道连接 后,它作为消息接收方,Server 是消息发送方。 Server/Receiver 与 Sender/Receiver 类似,Server 是消息的发送方,也是连接的主动 方。与 Sender 定义类似,Server 定义中必须指定 CONNAME 参数。Sender/Receiver 通道是最常见的通道配置方式, Sender 作为通道的发送方也是通道连接的主动发起方,Receiver 作为通道的接收方也是通道连接的被动监听方。在 Receiver 端要配置并运行相应的监听器。
配置示例
以下以Sender/Receiver 作为示例:
在以下的配置脚本中,通道连接两个队列管理器 QM1 和 QM2。其中,QM1为 Sender, QM2 为 Receiver。在 QM1 上配置了远程队列 QR 和传输队列 QX,其中 QR 指向队列管理器 QM2 上的本地队列 QL,且 QR 与 QX 对应,即凡是要放入 QR 队列的消息,在加上传输消息头后直接放入 QX 中等待发送。QM1 上配置 Sender 通道需要指定对方的通信参数 (IP地址和端口),而这些参数必须与 QM2 上的监听器设置对应。Sender 通道与传输队列 QX 对应,表示凡是在 QX 中等待发送的消息最终都可以由该通道送出。双方通道必须同名。 在连接通道的时候,我们只需在 QM1 端启动通道 start channel (C)。开始干活:
1.建立队列管理器 首先,我们在10.6.159.147 建立两个队列管理器QM1、QM2,然后运行起来;/var/mqm/sh$crtmqm QM1/var/mqm/sh$crtmqm QM2/var/mqm/sh$strmqm QM1/var/mqm/sh$strmqm QM2
2.建立队列和通道
定义qm1的队列和通道创建脚本:/var/mqm/sh$vi define_qm1.tst DEFINE QREMOTE (QR) RNAME (QL) RQMNAME (QM2) XMITQ (QX) REPLACEDEFINE QLOCAL (QX) USAGE (XMITQ) REPLACEDEFINE CHANNEL (C) CHLTYPE (SDR) TRPTYPE (TCP) CONNAME ('127.0.0.1 (1416)') XMITQ (QX) REPLACE
创建qm1的队列和通道:
/var/mqm/sh$runmqsc QM1 < define_qm1.tst > out
查看out文件,确认没有错误;
定义qm2的队列和通道创建脚本:
/var/mqm/sh$vi define_qm2.tst DEFINE QLOCAL (QL) REPLACE DEFINE CHANNEL (C) CHLTYPE (RCVR) TRPTYPE (TCP) REPLACE
创建qm2的队列和通道:
/var/mqm/sh$runmqsc QM2 < define_qm2.tst > out
查看out文件,确认没有错误;
3.在qm2运行监听器
在qm2上运行监听器,监听连接和发报请求;/opt/mqm/bin$runmqlsr -m QM2 -t tcp -p 1416
(停止监听器的命令:endmqlsr -m QM2)
4.运行通道
qm2的监听器不启动时,qm1上运行通道是无法启动的,因为无法建立起连接;/opt/mqm/bin$runmqchl -c C -m QM1
或者通过mqsc来运行通道:
runmqsc QM1 start channel (C)
5.发送测试报文
/var/mqm/sh$amqsput QR QM1 hello from qm1
6.接收测试报文
/var/mqm/sh$amqsget QL QM2>hello from qm1
一次全部接受回来
7.不同的机器上
进一步,我们再另外一台机器上建立QM3队列管理器:/var/mqm/sh$crtmqm QM3/var/mqm/sh$strmqm QM3队列的定义与qm2一样,创建:/var/mqm/sh$runmqsc QM3 < define_qm3.tst > out运行监听器:/opt/mqm/bin$runmqlsr -m QM3 -t tcp -p 1416
qm1上的队列需要修改下ip:
DEFINE QREMOTE (QR) RNAME (QL) RQMNAME (QM3) XMITQ (QX) REPLACEDEFINE QLOCAL (QX) USAGE (XMITQ) REPLACEDEFINE CHANNEL (C) CHLTYPE (SDR) TRPTYPE (TCP) CONNAME ('10.6.159.211 (1416)') XMITQ (QX) REPLACE
发送接收测试类似,没问题;
over;
Posted by: 大CC | 12DEC,2013 博客: 微博: