环境:Redhat5.6,WebsphereMQ7
安装很简单,rpm -ivh把需要的组件一个个安装好就可以了,我这里的配置是在一台机器上做的,其实远程的意思也是相对的,不一定非要多台机器,在这里本地通信指的是在同一个消息队列中,远程指的是在不同的消息队列中.
su mqm, 进入mqm用户操作MQ, 这里要创建两个队列管理器,分别是QM1,QM2,一个是发送端,一个是接收端:
发送端:
crtmqm QM1 --创建队列管理器
strmqm QM1 --启动队列管理器
runmqsc QM1 --运行队列管理器,其实是进入其中进行相应的配置
define qlocal(QL1) usage(xmitq) trigger trigtype(first) initq(System.channel.initq) trigdata(Q1ToQ2) --定义本地队列,这里的配置选项多了一些,其实完全可以用最基本的默认配置
define qremote(QR1) rname(QL2) rqmname(QM2) xmitq(QL1) --定义远程队列,指定目的队列的名称以及其队列管理器的名称,使用的本地队列
define chl(Q1ToQ2) chltype(sdr) conname('localhost(1415)') trptype(tcp) xmitq(QL1) --定义远程队列的传输通道,指定其类型(sdr表示发送端), 目的队列所在的主机以及其对应的监听端口, 协议类型与使用的本地队列
define listener(LSR1) trptype(tcp) port(1414) control(qmgr) --定义此队列管理器对应的监听器,注意这里的port,值必须是上面目的队列监听端口号减1,并设置其由队列管理器控制,即随QM启动与停止.
end --完成配置
接收端:
crtmqm QM2
strmqm QM2
runmqsc QM2
define qlocal(QL2) usage(xmitq) trigger trigtype(first) initq(System.channel.initq) trigdata(Q1ToQ2) --这里的名称必须与上面定义发送端的远程队列中的rname值相同
define chl(Q1ToQ2) chltype(rcvr) --名称必须与发送端的传输通道相同,类型为接收类型,只需简单的这两个配置即可
define listener(LSR2) trptype(tcp) port(1415) control(qmgr) --还是要注意端口,必须是发送端传输通道中指定的端口
end
这样就配置好了,当然还有很多地方可以简化,比如配置本地队列,其实define qlocal(QL1)即可,需要特别注意的有两个:
1)端口的问题,发送方的端口号必须比接收方的端口号少1,即发送方的端口确定下来,接收方也就确定了,在配置时不要晕了,清楚哪个端口对应哪个QM
2)监听器的问题,其实QM有其对应的默认监听器,但这里强烈建议像上面的过程自己手动配置一个新的,不用默认的
现在测试一下:
1)endmqm -i 两个消息队列,然后strmqm,为了将对应的监听器启动
2)runmqchl -c Q1ToQ2 -m QM1 启动传输通道,其实启动的是发送端
3)amqsput QR1 QM1 向QM1中的远程队列QR1写入消息,按两下回车结束
4)amqsget QL2 QM2 从QM2中的本地队列QL2中取出消息,注意这里是从QL2中取,因为消息发送到远程队列之后,会转发到指定的本地队列
经过以上步骤,WasMQ的远程队列配置就成功了!