本文参考MQ 9.0官方文档,结合平时使用整理,主要是Linux平台下的命令为主,部分平台(例如windows)会特别注明。
命名规则与限制
- Queue,Process,namelists,clusters,topics,services,authentication information对象最多48字符长
- channel对象名称最大20字符长,storage class最多8字符,CF 结构最多12字符长
- 长命令时,换行使用加号 + 前后需要空格
对象
- 队列管理器,以“SYSTEM.”开头的队列是预定义的队列,以SYSTEM.开头命名的,是系统对象
rpm -ivh MQSeriesRuntime*.rpm MQSeriesServer*.rpm ... 根据需要安装必须要的MQ组件
su - mqm 注意MQ管理命令必须是属于mqm组的用户才有权限执行,默认创建了mqm用户
/opt/mqm 默认MQ安装位置
设置环境变量,运行管理命令
cd /opt/mqm/bin
source setmqenv -s 设置变量,以便使用各种MQ管理命令
比较控制命令和脚本命令
控制命令是MQ提供的一系列可运行的小程序,它们可以独立地在linux shell中直接运行,对MQ各种对象进行操作,可以完成大部分功能。
其对于队列管理器对象本身的控制、MQ整体配置等功能支持较完善,但对于队列、通道、监听器等管理器中具体的对象控制较弱。
MQSC脚本命令需要在runmqsc启动的脚本解释器中运行,无法单独运行,其对于队列、通道等具体对象控制较强,完成大部分操作。
限制
- linux类系统中,命令是区分大小写的,windows下命令和参数标识(-)不区分大小写,但是参数值区分,例如队列名称
- 多个MQ安装副本时,相关命令设置一般关联当前命令所在的副本
队列管理器
crtmqm QMgrName 创建队列管理器QMgrName,一般采用默认即可
crtmqm -c “测试队列管理器” -ll -q JAVA.QUEUE.MANAGER.1
-c描述信息;-ll线性日志日志,-lc是循环日志(默认);-q设置为默认管理器
crtmqm -ld /var/tmp/logs -md /var/tmp/mqm/qmgrs -q JAVA.QUEUE.MANAGER.1
-ld设置日志路径,默认是/var/mqm/log; -md设置数据文件路径,默认是/var/mqm/qmgrs
crtmqm -q 60000 -q JAVA.QUEUE.MANAGER.1
-q 指明队列管理器管理监听器的端口,SYSTEM.LISTENER.TCP.1
dltmqm QMgrName 删除指定名称的队列管理器
strmqm QMgrName 运行队列管理器
endmqm QMgrName -c,默认受控制的方式停止队列管理器(等所有应用断开连接以及MQI调用处理完成)
endmqm -i QMgrName 立即关闭,(断开连接,等待MQI调用完成,未完成的任务下次启动回滚)
endmqm -p QMgrName 强制终止,一般异常时使用,会导致无法预知的结果
setmqm -m QMgrName -n InstallationName 设置QMgrName队列管理器相关联的安装副本
队列消息
dmpmqmsg:消息查看,导入导出,拷贝,移动等
dmpmqmsg -m QMgrName -i QUEUE1 -f stdout 查看队列QUEUE1消息
dmpmqmsg -m QMgrName -i QUEUE1 -f stdout -dT 查看消息的时间
dmpmqmsg -m QMgrName -i QUEUE1 -f /var/tmp/msg.txt 导出所有消息到一个文件
dmpmqmsg -m QMgrName -i QUEUE1 -f /var/tmp/msg%n 每条消息导出一个文件
dmpmqmsg -m QMgrName -o QUEUE1 -f /var/tmp/msg.txt 导入消息到队列
dmpmqmsg -m QMgrName -i QUEUE1 -o QUEUE2 拷贝消息到其它队列
dmpmqmsg -m QMgrName -i QUEUE1 -o QUEUE2 -r#10 拷贝前10条消息到队列
dmpmqmsg -m QMgrName -I QUEUE1 -o QUEUE2 -T1440 拷贝1天前的消息到队列
dmpmqmsg -m QMgrName -i Q1 -fstdout -T1440,2880 查看前一天的消息T[OlderThanTime][YoungerThanTime]
dmpmqmsg -iMATCH -s keyword1 -s keyword2 -m QMgrName -i Q1 查看匹配keyword1和keyword2的消息
dmpmqmsg -IMATCH -S keyword1 查看不含keyword1的消息
查看队列管理器一些管理信息
dmpmqaut 查看默认队列管理器定义的授权记录信息
dmpmqaut -m QMgrName 查看QMgrName定义的授权记录信息
dmpmqaut -m QMgrName -t channel 查看channel对象的授权记录信息(其它对象,listener|lstr,qmgr,queue|q)
dmpmqcfg -a -m QMgrName 查看队列管理所有配置信息,方便重建和恢复
dmqmqlog -m QMgrName 查看MQ 队列管理器系统日志
dmqmqlog -s nnnn:nnnn:nnnn:nnnn 从特定的LSN(log sequence number,日志序列号)号开始查看默认队列管理器的日志
dspmq 查看当前机器所有的队列管理器
dspmqcsv QMgraName 查看队列管理器目前的运行状态
dspmqfls SYSTEM.ADMIN* 查看默认管理器以 SYSTEM.ADMIN开头的对象文件路径
dspmqfils -m JAVA.QUEUE.MANAGER.1 -t queue queue* 查看名称为queue开头的队列对象的文件目录
dspmqtrn -m QMgrName 查看队列事务信息
dspmqver 查看MQ版本信息(默认是查看server组件和第一个安装副本的)
dspmqver -a 查看所有组件的版本信息
dspmqver -i 查看所有安装副本的信息
mqrc AMQ2045 查看AMQ信息代表的含义
mqrc 2033 查看返回值代表的意义
队列管理器配置文件
队列管理器配置信息:
默认在/var/mqm/mqs.ini文件中,有属性Name(管理名称)、Prefix(数据目录前缀)、Directory(管理器数据目录名称)、DataPath(数据目录完整路径)
dspmqinf QMgrNmae 查看指定队列管理器配置信息
在文件mqs.ini中添加一个名为JAVA.QUEUE.MANAGER.2的队列管理器配置信息
addmqinf -v DataPath=/var/mqm/qmgrs/JAVA!QUEUE!MANAGER!2 +
-v Prefix=/var/mqm +
-v Directory=JAVA!QUEUE!MANAGER!2 +
-v Name=JAVA.QUEUE.MANAGER.2
通过以上两条命令,可以在不同服务器上复制创建出配置一样的队列管理器实例
环境变量
# /opt/mqm/bin/crtmqenv -s 为当前安装副本创建和展示合适的环境变量列表,注意这里并没有设置shell环境
安装信息文件
安装信息配置文件/etc/opt/mqm/mqinst.ini,以下命令主要是该文件,不能直接改动该文件
第一个MQ安装版本自动命名Installation1添加到该文,因为此时crtmqinst命令还未能用;
后续安装可以先配置该文件例如自己命名,然后再安装其它版本,实现多副本安装。
必须以root用户权限来执行。
-n InstallationName:最多16个字符,也就是安装名称最多16个字符
/opt/mqm/bin/crtmqinst -n MyInstallation2 -p /opt/myInstallation2 -d "MQ 第二个副本安装"
在mqinst.ini添加条目,创建一个安装名称为MyInstallation2,安装路径为/opt/myInstallation2的安装实例信息
dspmqinst MyInstallation2这个安装实例状态 `State:Not Available`
因为还未安装,继续安装MyInstallation2实例
# ./mqlicense.sh
# ./crgmqpkg 2 根据当前系统已安装的MQ情况,创建一个需要的安装包的集合
重新打包完成在/var/tmp/mq_rpms/2/x86_64目录下,2是唯一标识安装包的,可以是16个字符内的任意字符串
# cd /var/tmp/mq_rpms/2/x86_64
# rpm --prefix /opt/myInstallation2 -ivh MQSeriesServer_2-8.0.0-2.x86_64.rpm MQSeriesRuntime_2-8.0.0-2.x86_64.rpm
# /opt/myInstallation2/bin/dspmqinst
相关命令:
dltmqinst -n MyInstallation2 -p /opt/myInstallation2 删除指定副本的安装信息(roOt用户)
setmqinst -i -n MyInstallation2 指定MyInstallation2 成为主安装副本
setmqinst -x -n MyInstallation2 取消MyInstallation2 作为主安装副本
dspmqinst 查看本机所有安装副本信息
dpsmqinst -n MyInstallation2 查看副本MyInstallation2的安装信息
mqconfig -v 8.0 检查系统设置是否满足MQ 8.0的安装要求
其它对象命令
runmqsc QmgrName 进入脚本命令执行环境,操作对应的队列管理器,执行MQSC命令
runmqlsr -t tcp -p 1414 -i 127.0.0.1 -m QmgrName 启动队列管理器监听器
runmqchl -c channel1 -m QMgrName 启动指定的通道
MQSC:MQ Script Command,通过命令解释器执行
命令脚本可以管理各种队列管理器对象, 包括queue manager, queues, process definitions,
channels, client connection channels, listeners, services, namelists, clusters,
and authentication information objects.
启动脚本解释器
runmqsc 启动默认管理器的命令解释器
runmqsc -v QmgrName < "/var/mqm/mqsc/commfile.in" 验证文件里脚本命令是否正确
runmqsc QmgrName < "/var/mqm/mqsc/commfile.in" > "/var/mqm/mqsc/mqscfile.out" 执行文件命令并输出到文件(文件语句以分号)
远程队列管理器操作,需要进行配置,这里仅仅列出命令
runmqsc -w 30 -m QMLOCAL QMREMOTE 连接远程的队列管理器进行命令执行
strmqcsv QmgrName 启动脚本命令服务,以便接受远程脚本命令
帮助:
ls 查看当前有哪些命令可以用
DIS 直接敲入命令回车会显示 参数语法提示
命令归纳总结
命令操作的主要对象有11种:(这里只考虑linux、windows,对于z/os和IBM i系列平台命令不考虑)
CHANNEL(通道)、LISTENER(监听器)
queues [QALIAS\QLOCAL\QMODEL\QREMOTE](不同种类队列对象)
SUB(订阅对象)、TOPIC(话题对象)、AUTHINFO(授权对象信息)
SERVICE(服务对象)、PROCESS(进程对象)、COMMINFO(通信信息对象,多播通信需要)
其它可修改可查看对象:
NAMELIST(名称列表)、QMGR(队列管理器对象)
主要的命令操作包括:9种
ALTER(修改)、DEFINE(定义对象)、CLEAR(清除)、DELETE(删除)、DISPLAY或者DIS简写(查看)
RESET(重置)、SET(设置)、START(启动)、STOP(停止)
其它操作:
PING(测试连通)、MOVE(移动)、PURGE(清除)、REFRESH(刷新)、RESOLVE(求解)
基本命令都是:操作+对象+参数
常用命令
队列:
DIS QUEUE(*) 查看当前所有的队列对象
DIS QLOCAL(*) 查看QLOCAL类型的队列对象
DEFINE QLOCAL(QUEUE1) 定义本地队列QUEUE1
DIS QUEUE(QUEUE1) 查看对象QUEUE1的属性信息
DIS QSTATUS(QUEUE1) 查看QUEUE1的运行状态
CLEAR QLOCAL(QUEUE1) 清除队列消息
DELETE QLOCAL(QUEUE1) 删除本地队列
DELETE QLOCAL(QUEUE1) PURAGE 删除队列,即使有提交的消息
队列管理器:
DIS QMGR 查看当前队列管理器的属性信息
DIS QMSTATUS 查看当前队列管理器运行状态
DIS CONN(*) 查看应用连接情况,每个应用连接产生24个字节的唯一id
PING QMGR 发送测试消息给队列管理器的命令服务队列
通道:
通道具有多种类型,不同类型应用场景、支持的参数不一样
CHANNEL可以简写CHL
SVRCONN:服务器连接通道,可接受客户端应用等连接
注意字符串 以单引号或者不加引号(注意中文一定要加),双引号会出错,单引号!
DEFINE CHANNEL(channel1) CHLTYPE(SVRCONN) DESCR('测试通道1') MCAUSER('mquser1') TRPTYPE(TCP)
定义TCP协议的服务器通道,使用系统用户user1访问MQ资源
DIS CHANNEL(*) 查看所有通道信息
DIS CHANNEL(channel1) 查看通道channel1的信息
DIS CHANNEL(*) TYPE(SVRCONN) 查看指定类型的通道信息
SET CHLAUTH(channel1) TYPE(ADDRESSMAP) ADDRESS(127.0.0.1) DESCR('测试授权') USERSRC(MAP) MCAUSER('mquser1')
注意:定义运行127.0.0.1通过通道channel1以系统用户mquser1来访问MQ资源
SET CHLAUTH(channel1) TYPE(USERMAP) CLNTUSER('clientUser1') DESCR('测试授权') USERSRC(MAP) MCAUSER('mquser1')
注意:定义客户端应用以用户clientuser1来通过通道channel1,映射成系统用户mquser1来访问MQ
USERMAP类型只支持 SVRCONN类型通道
DIS CHLAUTH(channel1) 查看通道所有权限认证信息
DIS CHLAUTH(channel1) TYPE(ADDRESSMAP) 查看通道特定类型的权限认证信息
DIS CHLAUTH(channel1) TYPE(USERMAP)
DIS CHSTATUS(channel1) 查看通道状态
PING CHANNEL(channel1) 测试测试消息到队列,仅支持SENDER, SERVER 和CLUSSDR 类型
START CHANNEL(channel1)
STOP CHANNEL(channel1)
DELETE CHANNEL(channel1) 删除通道
监听器:
DEFINE LISTENER(listener1) TRPTYPE(TCP) IPADDR('127.0.0.1') PORT(50005) DESCR('监听器测试')
定义地址127.0.0.1和端口50005的监听器,IPADDR可以省略,默认在所有的本机地址监听
DIS LISTENER(listener1)
或者简写
DIS LSTR(listener1) 查看监听器属性
START LISTENER(listener1) 启动
DIS LSSTATUS(listener1) 查看已启动的监听器运行状态(必须启动)
STOP LISTENER(listener1) 停止监听器
定义对象访问授权信息:
SET AUTHREC PROFILE(CHANNEL1) OBJTYPE(CHANNEL) PRINCIPAL('mquser1') AUTHADD(ALL)
授予用户mquser全部权限访问通道对象channel1
SET AUTHREC PROFILE(CHANNEL1) OBJTYPE(CHANNEL) PRINCIPAL('mquser1') AUTHRMV(PUT,GET)
删除一些权限
SET AUTHREC PROFILE(CHANNEL1) OBJTYPE(CHANNEL) PRINCIPAL('mquser1') AUTHADD(ALL) AUTHRMV(PUT)
授权除了put之外所有权限
OBJTYPE常用:CHANNEL\CLNTCONN\LISTENER\QUEUE\QMGR\RQMNAME\TOPIC等
权限常用:
NONE(没有权限)、ALL(所有权限)、ALLADM(管理员权限)、ALLMQI(MQI调用权限)
BROWSE(从队列查找消息)、CHG(改变对象的属性)
CLR(清除队列或话题)、DLT(删除)、CONNECT(应用连接队列管理器)、DSP(查看对象属性)
GET(读取消息)、INQ(队列信息查询)、PUT(发送消息)、CTRL(启停对象、ping操作)
SUB(订阅)、PUB(发布)
查看队列管理器运行状态
dspmq 查看队列管理器运行(命令)
dsmmq -m JAVA.QUEUE.MANAGER.1 -o all 查看指定队列管理器的运行状态
DIS QMSTATUS ALL 查看队列管理器所有状态信息
属性:
STATUS:运行状态,启动、运行、停顿
CHINIT:通道初始器的运行状态
CMDSERV:命令服务器状态
CONNS:队列管理器的连接数量
STARTDA:启动日期
STARTTI:启动时间
查看队列运行状态
DIS QSTATUS(QUEUE1)
重点关注以下属性:
CURDEPTH:current depth,队列当前深度,队列中消息数量
UNCOMM:显示是否有未提交的队列操作(包括put和get)
QTIME:毫秒数,表明消息放入队列到被读出的间隔时间
IPPROCS: 目前打开该队列进行输入操作的句柄数量,不包括打开浏览的
OPPROCS:打开进行输出...
LGETDATE:队列管理器启动后,从该队列get消息的最近日期
LGETTIME:最近get时间
LPUTDATE:队列管理器启动后,put消息到该队列的最近日期
LPUTTIME:最近put时间