MQ项目IBM MQ 安装
在144.131.254.177 (A机)和144.131.254.178(B机) 两台机器上安装MQ Cluster环境.配置共享磁盘 /mqha
- 安装前检查环境
df –h
保证有足够的空间
2. 创建mqm用户和组
Groupadd –g 1000 mqm
Useradd –u 1000 –g mqm –d /home/mqm –m mqm
保证A,B机 用户和组id相同
3. 软链接到共享磁盘
(1)先挂载共享盘到A机
在共享盘上创建文件系统/mqha
在文件系统/mqha目录下创建2个文件夹/opt/mqm 和 /var/mqm
Cd /opt
Ln –s /mqha/opt/mqm mqm
Cd /var
Ln –s /mqha/var/mqm mqm
(2)再挂载共享盘到B机
Cd /opt
Ln –s /mqha/opt/mqm mqm
Cd /var
Ln –s /mqha/var/mqm mqm
4. 上传介质到A,B机的/home/mqm
解包 tar xvf MQv7.0.1_Linux_32bit.tar
5. 安装MQ二进制文件
在A机上挂载共享盘
(1)进入安装目录,执行命令root 执行
./mqlicense.sh -accept
接收license协议
(2)执行rpm -ivh *.rpm
安装所有MQ安装package
在B机上挂载共享盘,重复1-2,安装好MQ二进制代码
6. 创建队列管理器
在 A,B机的任意一端挂载共享盘
使用mqm身份执行
Crtmqm test (创建test队列管理器)
Strmqm test (启动test队列管理器)
Dspmq (查看队列管理器状态)
Endmqm test (关闭test队列管理器)
Umount共享文件系统
挂载到另外一边
Dspmq (查看队列管理器状态)
Strmqm test (启动test队列管理器)
如果启动成功 说明A,B机都可以正常启动MQ
然后在HA脚本里添加队列管理器起停命令
附件 MQ基本命令和参数
- 队列管理器
创建队列管理器
命令:crtmqm <qmgrName>
示例:
crtmqm -ld /var/mqm/log -lc -lf 16384 -lp 25 -ls 5 QMCIS
参数说明:
-ld 日志文件目录
-lc 使用循环日志
-lf 日志文件页大小
-lp 主日志文件个数
-ls 辅助日志文件个数
QMCIS:队列管理器名
启动队列管理器
命令:strmqm <qmgrName>
停止队列管理器
命令:endmqm -c|-w|-i|-p <qmgrName>
参数说明:
-c 受控关闭(或停顿关闭)。这是缺省值。
队列管理器停止,但仅当所有应用程序已断开连接后才停止。当前正在处理的任何 MQI 调用已完成。
立即将控制权返回给您,并且不通知您队列管理器是何时停止的。
对通过服务器连接通道连接的任何客户机应用程序的影响等效于以 QUIESCE 方式发出的 STOP CHANNEL 命令。
-w 等待关闭。
此类型的关闭等效于受控关闭(除了仅当队列管理器已停止后才将控制权返回给您之外)。当执行关闭时,您将接收到消息:等待队列管理器 qmName 结束。
对通过服务器连接通道连接的任何客户机应用程序的影响等效于以 QUIESCE 方式发出的 STOP CHANNEL 命令。
-i 立即关闭。队列管理器在完成所有当前正在处理的 MQI 调用后停止。任何在该命令发出后发出的 MQI 请求都将失败。当队列管理器再次启动时,任何未完成的工作单元将回滚。
队列管理器结束后返回控制权。
对通过服务器连接通道连接的任何客户机应用程序的影响等效于以 FORCE 方式发出的 STOP CHANNEL 命令。
-p 抢先关闭。
仅在意外情况下使用此类型的关闭。例如,当队列管理器在常规 endmqm 命令下未停止。
队列管理器可以停止而不等待应用程序断开连接或 MQI 调用完成。这可能会产生 WebSphere MQ 应用程序的不可预测的结果。关闭方式设置为立即关闭。如果队列管理器稍后未停止,关闭方式将升级,且终止所有剩余的的队列管理器进程。
对通过服务器连接通道连接的任何客户机应用程序的影响等效于以 TERMINATE 方式发出的 STOP CHANNEL 命令。
删除队列管理器
命令:dltmqm
显示队列管理器启动状态
命令:dspmq
命令结果显示示例:
QMNAME(Test) STATUS(正在运行)
QMNAME(Test2) STATUS(已正常结束)
- 管理本地MQ对象
使用 MQSC 命令执行本地管理任务
使用MQSC命令执行定义或修改队列、通道等操作。MQSC命令可以有以下两种使用方式:
- 交互地使用 MQSC 命令:runmqsc [qmgrName]
- 从文本文件运行 MQSC 命令:runmqsc [qmgrName] < myprog.in > myprog.out
WebSphere MQ 认证信息、通道、客户机通道、侦听器、名称列表、进程、队列、服务和存储类对象存在于各自独立的对象名称空间中,因此,每个不同类型的对象都可以有相同的名称。但是,同一个名称空间中的对象不能与任何其它的对象同名。(例如,本地队列不能和模型队列有相同的名称。)WebSphere MQ 中的名称都区分大小写;但是,您应该记住不包含在引号中的小写字符将转换为大写。
显示或修改队列管理器属性
display qmgr (display可简写为dis)
示例:
alter qmgr CCSID(819) #修改字符集
def ql(DEADQ) defpsist(yes) maxdepth(20000) replace
alter qmgr deadq(DEADQ) #设置死信队列为DEADQ
队列
- 定义本地队列示例
def ql(FROMCCPC_1) maxdepth(10000) defpsist(yes) replace
参数说明:
- ql(FROMCCPC_1): 队列本地名称
- maxdepth:队列上允许的最大消息数;
- defpsist:队列中消息持久性默认值。
NO 该队列上的消息在队列管理器重新启动时丢失
YES 该队列上的消息在队列管理器重新启动时保存了下来。
关于消息在队列中的保存时间:消息在队列的保存时间与三个设置有关:队列defpsist属性、消息Persistence持久性属性和消息Expiry消息到期时间属性,其中队列defpsist属性是在创建队列时设置,消息Persistence和Expiry属性是应用程序往队列放入消息时指定。消息本身的Persistence值优先于队列defpsist值。Expiry指消息到期时间,即经过指定的时间后,消息如果还没被取走,此消息将过期(无效)。消息过期后,可能会自动从队列中删除(取决于不同操作系统的MQ实现)。对于非持久性消息,即使Expiry设为永不过期,重启队列管理器时,消息也将丢失。
- 定义远程队列示例
def qr(TOCCPC_1) rname(5819_1) rqmname(QMC5819) xmitq(QMGF) defpsist(yes) replace
参数说明:
- qr(TOCCPC_1):队列本地名称,名字可任意取;
- rname(5819_1):远程队列名,必须与远程队列管理器中的本地队列名相同;
- rqmname(QMC5819):远程队列管理器名,必须与远程队列管理器名相同;
- xmitq(QMGF):本地传输队列名称。
- 定义传输队列示例
def ql(QMGF) usage(XMITQ) defpsist(YES) maxdepth(50000) trigger trigtype(FIRST) trigdata(999581030604.5819) initq(SYSTEM.CHANNEL.INITQ) replace
参数说明:
- ql (QMGF):队列本地名称,名字可任意取;
- usage(XMITQ):指定此本地队列为传输队列,参数值固定填"XMITQ";
- trigger:启动触发(相应的,NOTRIGGER为禁用触发)
- trigtype(FIRST) :触发方式,建议值为"FIRST",即第一条消息触发;
- trigdata(999581030604.5819):触发数据,值为传输队列将使用的发送通道名;
- initq(SYSTEM.CHANNEL.INITQ):触发队列,固定填"SYSTEM.CHANNEL.INITQ"。
触发器在此的作用是当传输队列接收到第一条消息时,将触发启动指定的发送通道。
- 查看队列
dis ql(qname) all 显示队列所有属性
dis ql(qname) curdepth 显示队列当前深度,即当前队列中存放的消息数
dis qs(qname) type(queue) all显示与队列相关的状态信息
dis qs(qname) type(handle) all显示与访问队列的句柄相关的状态信息
- 删除队列
delete ql(qname)
- 删除队列中的消息
clear ql(qname)
注:删除队列中的消息时出错时处理
尝试执行命令RESOLVE CHANNEL(channel_name) ACTION( COMMIT )后,再执行clear ql命令。
通道
- 定义接收通道
def chl(999581000107.5819) chltype(rcvr) trptype(tcp) replace
参数描述:
- chl(999581000107.5819):接收通道名称,必须与远程队列管理器中的发送对列名称相同。推荐的命名规则为 "远程队列管理器名.本地队列管理器名";
- chltype(rcvr):指定通道为类型,值固定为"rcvr";
- trptype(tcp):通讯协议,除非特别指明,一般采用"tcp"协议。
- 定义发送通道
def chl(5819.999581000107) chltype(SDR) discint(0) conname('10.2.106.106(1417)') xmitq(QMCIS) trptype(tcp) replace
- 定义服务器连接通道
def chl() chltype() replace
- 删除通道
Delete chl(channel name)
- 查看通道状态
dis chs(channel name)
通道的当前状态,它可以是正在启动、正在绑定、正在初始化、正在运行、正在停止、正在重试、已暂停、已停止、正在请求和通道状态未找到。
正常运行时,通道状态为"正在运行";
关闭通道时,通道状态为"已停止";
如果通道状态长时间处于"正在绑定"(binding)、"正在重试"(retrying),则表明通道不正常,需要人工介入。这时可查看队列管理器日志文件,日志文件中一般会提供异常原因。
关于"通道状态未找到":此状态值仅表示当前没有建立到此通道的连接,并不能表示通道是否正常。
- 启动通道
Start chl(channel name)
- 关闭通道
Stop chl(channel name)
- 重置通道
reset chl(channel name)
监听器
定义监听器
def listener(QMC5819) TRPTYPE(TCP) PORT(1417) CONTROL(STARTONLY) BACKLOG(0) replace
参数描述:
- listener(QMC5819):监听器名,名称可任意取;
- TRPTYPE(TCP):通讯协议类型;
- PORT(1417):服务监听端口
MANUAL 不会自动启动或自动停止侦听器。通过使用 START LISTENER 命令和 STOP LISTENER 命令来控制它。这是缺省值。
QMGR 当队列管理器启动和停止时,同时启动和停止被定义的侦听器。
STARTONLY 当队列管理器启动时,同时启动侦听器,但当队列管理器停止时,不请求停止侦听器。
- 启动监听器
start listener(QMC5819)
- 关闭监听器
stop listener(QMC5819)
- 查看监听器状态
dis lsstatus(LISTENER.TCP) all (L) all