IBM MQ部署实施过程详解

时间:2024-04-13 17:03:56

一、安装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

IBM MQ部署实施过程详解

 

找出FALL项。依IBM建议修改相应配置并使其生效;

 

8.切换mqm用户

Su - mqm

Cd /opt/mqm/bin

source setmqenv -s(配置环境变量)

 

9.产看mq版本信息

Dspmqver

IBM MQ部署实施过程详解

 

 

 

二、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工作流程图:

IBM MQ部署实施过程详解