一、安装mq
1、上传介质
Xftp
2.创建安装目录
Mkdir /opt/mqm
3.解压介质
tar -xzvf 9.0.0-IBM-MQ-LinuxX64-FP0002.tar.gz
4.创建mqm用户
groupadd mqm
useradd -d/var/mqm -g mqm -G mqm mqm
passwd mqm #只有把mqm密码改了,才能使以上生效(passwd:mqm)
5.调整系统参数(视需要而定)
修改最大共享内存,命令如下:
cat /proc/sys/kernel/shmmax
echo 268435456 >/proc/sys/kernel/shmmax
修改最大文件句柄,命令如下:
cat /proc/sys/fs/file-max
echo 32768 >/proc/sys/fs/file-max
6.安装
./mqlicense.sh -accept(获取产品许可)
rpm -ivh *.rpm(安装所有安装包)
7.产看系统的内核参数是否符合MQ的要求
yum install bc -y 安装bc
Su mqm -c/opt/mqm/bin/mqconfig
找出FALL项。依IBM建议修改相应配置并使其生效;
8.切换mqm用户
Su - mqm
Cd /opt/mqm/bin
source setmqenv -s(配置环境变量)
9.产看mq版本信息
Dspmqver
二、mq之间消息互通
这里以A----------B作为通信双方
A
mkdir /var/mqm/qmgrs/log -p(创建日志目录)
1.创建队列管理器
crtmqm -ld /var/mqm/qmgrs/log -lc -lf 16384 -lp 20 -ls 2 QMU5810A
2.启动队列管理器
strmqm QMU5810A
3.查看队列管理器状态
dspmq
4.进入队列管理器
Runmqsc QMU5810A
创建本地队列MSGCCPC_1(用于读取B端远程队列传输的消息)
DEFINE QL('MSGCCPC_1') MAXDEPTH(999999999) MAXMSGL(9194304) DEFPSIST(YES) REPLACE
创建死信队列(垃圾回收机制)
DEF QL('DEADQ') MAXDEPTH(290000) DEFPSIST(yes) REPLACE
ALTER QMGR DEADQ(DEADQ)
创建监听器(监听自己主机用于接收消息的端口)
DEF LISTENER(LSNRPMTS) TRPTYPE(TCP) PORT(1428) BACKLOG(0) CONTROL(QMGR)
启动监听器
START LISTENER(LSNRPMTS)
创建本地传输队列(用于本地队列实现消息之间的传输)
DEF QL(XM2900A) USAGE(XMITQ) MAXDEPTH(290000) TRIGGER TRIGTYPE(FIRST) INITQ(SYSTEM.CHANNEL.INITQ) DEFPSIST(yes) MAXMSGL(10240000) TRIGDATA(313231000013B.MBFEB) REPLACE
创建发送通道(发送通道名称必须和对方接受通道名称一致)
#LOCLADDR对应本地机器的IP地址
#CONNAME为目标主机的IP地址和端口号
#XMITQ为本地传输队列
DEF CHL(313231000013B.MBFEB) CHLTYPE(SDR) LOCLADDR(192.168.0.133) CONNAME('192.168.0.134(1426)') XMITQ(XM2900A) TRPTYPE(tcp) MAXMSGL(10240000) DISCINT(0) SHORTRTY(10000) SHORTTMR(30) LONGTMR(300) LONGRTY(999999999) BATCHSZ(50) REPLACE
启动发送通道
START CHL(313231000013B.MBFEB)
创建远程队列(当给B发送消息时直接发到远程队列里)
#RNAME对应对方MQ的本地队列;
#RQMNAME对应对方MQ的队列管理器
#XMITQ为本地的传输队列
DEF QR(MSGCCPC_2) RNAME(MSGCCPC_BANK_1) RQMNAME(QMU5810A_BANK) XMITQ(XM2900A) DEFPSIST(yes) REPLACE
创建接收通道(接收通道和对方MQ的发送通道名称一致)
DEF CHL(MBFEB.313231000013B) CHLTYPE(RCVR) TRPTYPE(tcp) MAXMSGL(10240000) REPLACE
创建服务通道(不能和对方服务通道同名称)
DEFINE CHANNEL(DC.SVRCONN) CHLTYPE(SVRCONN) REPLACE
B
mkdir /var/mqm/qmgrs/log -p
1.创建队列管理器
crtmqm -ld /var/mqm/qmgrs/log -lc -lf 16384 -lp 20 -ls 2 QMU5810A_BANK
2.启动队列管理器
strmqm QMU5810A_BANK
3.查看队列管理器状态
dspmq
4.进入队列管理器
创建本地队列(用于B方在本地取消息)
DEFINE QL(MSGCCPC_BANK_1) MAXDEPTH(999999999) MAXMSGL(9194304) DEFPSIST(YES) REPLACE
创建死信队列
DEF QL('DEADQ_BACK') MAXDEPTH(290000) DEFPSIST(yes) REPLACE
ALTER QMGR DEADQ(DEADQ_BACK)
创建监听器(监听自己主机用于接收消息的端口)
DEF LISTENER(LSNRPMTS_BACK) TRPTYPE(TCP) PORT(1426) BACKLOG(0) CONTROL(QMGR)
启动监听器
START LISTENER(LSNRPMTS_BACK)
创建本地传输队列(用于本地队列实现消息之间的传输)
DEF QL(XM2900A_BACK) USAGE(XMITQ) MAXDEPTH(290000) TRIGGER TRIGTYPE(FIRST) INITQ(SYSTEM.CHANNEL.INITQ) DEFPSIST(yes) MAXMSGL(10240000) TRIGDATA(MBFEB.313231000013B) REPLACE
创建发送通道(发送通道名称必须和对方接受通道名称一致)
#LOCLADDR对应本地机器的IP地址
#CONNAME为目标主机的IP地址和端口号
#XMITQ为本地传输队列
DEF CHL(MBFEB.313231000013B) CHLTYPE(SDR) LOCLADDR(192.168.0.134) CONNAME('192.168.0.133(1428)') XMITQ(XM2900A_BACK) TRPTYPE(tcp) MAXMSGL(10240000) DISCINT(0) SHORTRTY(10000) SHORTTMR(30) LONGTMR(300) LONGRTY(999999999) BATCHSZ(50) REPLACE
启动发送通道
START CHL(MBFEB.313231000013B)
创建远程队列 MSGCCPC_2_BACK(当给A发送消息时直接发到远程队列里)
#RNAME对应对方MQ的本地队列;
#RQMNAME对应对方MQ的队列管理器
#XMITQ为本地的传输队列
DEF QR(MSGCCPC_2_BACK) RNAME(MSGCCPC_1) RQMNAME(QMU5810A) XMITQ(XM2900A_BACK) DEFPSIST(yes) REPLACE
创建接收通道(接收通道和对方MQ的发送通道名称一致)
DEF CHL(313231000013B.MBFEB) CHLTYPE(RCVR) TRPTYPE(tcp) MAXMSGL(10240000) REPLACE
创建服务通道(不能和对方服务通道同名称)
DEFINE CHANNEL(DC.SVRCONN_BACK) CHLTYPE(SVRCONN) REPLACE
测试A发送消息
amqsput MSGCCPC_2(A远程队列) QMU5810A(A队列管理器)
测试B接受消息
amqsget MSGCCPC_BANK_1(B本地队列) QMU5810A_BANK(B队列管理器)
测试B发送消息
amqsput MSGCCPC_2_BACK(B远程队列) QMU5810A_BANK(B队列管理器)
测试A接受消息
amqsget MSGCCPC_1(A本地队列) QMU5810A(A队列管理器)
MQ工作流程图: