WebSphere MQ基础命令

基础概念 对于MQ,我们需要知道4个名词:队列管理器、队列、消息、通道;对于编程设计人员,通常更关心消息和队列,对于维护管理人员,通常 会更关心队列管理器和通道。如果我们把队列管理器比作是数据库,那么队列就是其中的一张表,消息就是表中的一条记录。 队列:我们可以简单地把队列看成一个容器,用于存放消息。

队列管理器:队列管理器构建了独立的 MQ 的运行环境,它是消息队列的管理者,用来维护和管理消息队列。

消息:MQ中的最小对象;默认情况下,消息缺省可以达到 4MB。消息可以分成持久消息和非持久消息。所谓“持久”的 意思,就是在MQ 队列管理器重启动后,消息是否仍然能保持。持久的消息写入或读出队列的同时会在 Log 中记录,所以性能上比非持久消息差不少。

通道:通道则是两个队列管理器之间的一种单向的点对点的通信连接, 消息在通道中只能单向流动。队列管理器之间的通信是通过配置通道来实现 的,通道两侧的队列管理器对这个通道的相关参数应该能对应起来。在通道上可以配置不同的通信协议,这样就使得编程接口与通信协议无关。通道两端的 配置必须匹配,且名字相同,否则无法连通。

RUNMQSC:命令行交互界面管理工具;作为维护人员的我们,与MQ打交道有两种方式,一种是通过MQ提供的二进制命令工具(在mq安装目录的bin目录下),另一种方式则是通过命令行交互管理工具;这二者在功能上有很多是重合的,但并非完全可替代;RUNMQSC是一个通用的 MQ 对象管理工具,使用 MQSC命令集可以对 MQ 对象进行全方位的管理,也是各种管理方式最直接、最全面的一种。RUNMQSC 运行的命令集称为 MQSC (MQ Script Command)";在 RUNMQSC 中大小写无关,所有的命令会先转换成全大写再提交执行。所以如果要 表示大小相关的字串,比如对象名,则用引号将字串包住。输入以下命令启动MQSC命令:runmqsc [queueManagerName]

--查看MQ版本--

dspmqver

--查看队列状态-- dspmq

--创建队列管理器-- crtmqm -q ECIS_QM

--删除队列管理器-- dltmqm ECIS_QM

--启动队列管理器-- strmqm ECIS_QM

--关闭队列管理器-- endmqm -i ECIS_QM 立即停止 endmqm -p ECIS_QM 强制停止

--运行队列管理器-- runmqsc ECIS_QM

--定义监听器-- DEFINE LISTENER(LSR_4_ECIS_QM) TRPTYPE(TCP) PORT(1616) CONTROL(QMGR) REPLACE START LISTENER(LSR_4_ECIS_QM)

--定义通道-- DEFINE CHANNEL(ECIS.SVRCONN) CHLTYPE(SVRCONN) MCAUSER('mqm') REPLACE

--启动通道-- runmqchl –c ChlName –m ECIS_QM

--启动侦听-- runmqlsr –t TCP –p 1616 –m ECIS_QM endmqlsr -m ECIS_QM

--定义队列-- DEFINE QL(Q_SVC2ADP_4_TELNET) REPLACE DEFINE QL(Q_SVC2ADP_4_JDBC) REPLACE DEFINE QL(Q_SVC2ADP_4_HTTP) REPLACE DEFINE QL(Q_SVC2ADP_4_SOCKET) REPLACE

--删除队列-- delete QL(Q_SVC2ADP_4_TELNET)

--查看监听器-- display listener (LSR_4_ECIS_QM)

--查看通道-- dis chs(*)

--查看通道-- display ql(*) [all]

--查看队列深度-- display ql(Q_SVC2ADP_4_HTTP) curdepth

--清除队列消息-- clear ql(Q_SVC2ADP_4_HTTP)

--查看CCSID-- display qmgr all

--修改CCSID-- ALTER QMGR [FORCE] CCSID(5488)

逻辑定义 ################################################## ./JMSAdmin

DELETE QCF(T_ECIS_QCF)

DELETE Q(T_ECIS_Q_SVC2ADP_TELNET)  DELETE Q(T_ECIS_Q_ADP2SVC_TELNET) DELETE Q(T_ECIS_Q_SVC2ADP_JDBC) DELETE Q(T_ECIS_Q_ADP2SVC_JDBC)

DELETE Q(T_ECIS_Q_SVC2ADP_HTTP) DELETE Q(T_ECIS_Q_ADP2SVC_HTTP) DELETE Q(T_ECIS_Q_SVC2ADP_SOCKET) DELETE Q(T_ECIS_Q_ADP2SVC_SOCKET)

DEFINE QCF(T_ECIS_QCF) DESC() TRAN(CLIENT) HOST(10.151.128.13) QMGR(T_ECIS_QM) CHAN(T_ECIS.SVRCONN) PORT(2626) CCSID(5488)

DEFINE Q(T_ECIS_Q_SVC2ADP_TELNET) DESC() QMGR(T_ECIS_QM) QUEUE(Q_SVC2ADP_4_TELNET) CCSID(5488) DEFINE Q(T_ECIS_Q_ADP2SVC_TELNET) DESC() QMGR(T_ECIS_QM) QUEUE(Q_ADP2SVC_4_TELNET) CCSID(5488) DEFINE Q(T_ECIS_Q_SVC2ADP_JDBC) DESC() QMGR(T_ECIS_QM) QUEUE(Q_SVC2ADP_4_JDBC) CCSID(5488) DEFINE Q(T_ECIS_Q_ADP2SVC_JDBC) DESC() QMGR(T_ECIS_QM) QUEUE(Q_ADP2SVC_4_JDBC) CCSID(5488)

DEFINE Q(T_ECIS_Q_SVC2ADP_HTTP) DESC() QMGR(T_ECIS_QM) QUEUE(Q_SVC2ADP_4_HTTP) CCSID(5488) DEFINE Q(T_ECIS_Q_ADP2SVC_HTTP) DESC() QMGR(T_ECIS_QM) QUEUE(Q_ADP2SVC_4_HTTP) CCSID(5488) DEFINE Q(T_ECIS_Q_SVC2ADP_SOCKET) DESC() QMGR(T_ECIS_QM) QUEUE(Q_SVC2ADP_4_SOCKET) CCSID(5488) DEFINE Q(T_ECIS_Q_ADP2SVC_SOCKET) DESC() QMGR(T_ECIS_QM) QUEUE(Q_ADP2SVC_4_SOCKET) CCSID(5488)

WebSphere MQ常用命令及配置 ##################################################  //创建本地队列Q DEFINE   QLOCAL (Q) //将本地队列Q 的最大深度设置为5 ALTER QLOCAL (Q) MAXDEPTH(5) //重新创建本地队列Q 如果Q已经存在,则将其全部属性重置为缺省属性 DEFINE QLOCAL (Q) REPLACE //创建远程队列 DEFINE QREMOTE(QRNAME) RNAME(AAA) RQMNAME(QMGRNAME) XMITQ(QTNAME) //创建传输队列 define qlocal(CLV_HQ_TRAN) usage(xmitq) INITQ(SYSTEM.CHANNEL.INITQ) TRIGDATA(REV_CLV) TRIGTYPE(EVERY) TRIGGER REPLACE //创建接收端通道C DEFINE CHANNEL(C) CHLTYPE(RCVR) //创建发送方通道C ,连接对方的IP为10.10.10.10  端口为1414 通道连接的传输队列为XQ DEFINE CHANNEL(C) CHLTYPE(SDR) CONNAME(’10.10.10.10 (1414)’) XMITQ(XQ) //创建请求方通道 DEFINE CHANNEL(D) CHLTYPE(RQSTR) CONNAME(’10.10.10.10 (1414)’) //创建服务器通道 DEFINE CHANNEL (D) CHLTYPE(SVR) xmitq (XQ1) //创建服务器连接通道 DEFINE CHANNEL(E) CHLTYPE(SVRCONN)  REPLACE

//显示所有远程队列 display qremote (*) //显示所有通道 Display channel (*)

//定义死信队列 DEFINE QLOCAL(QUEUE) DEFPSIST(YES) REPLACE

//设定队列管理器的死信队列 ALTER QMGR DEADQ(QUEUE)

设置MaxChannels和MaxActiveChannels属性(最大连接数) ################################################## MaxChannels和MaxActiveChannels分别代表队列管理器允许配置的通道的最大个数和允许同时运行的通道的个数,MaxChannels的缺省值是100,MaxActiveChannels的缺省值与MaxChannels相同。如果您的并发通道连接个数超过了100,您需要修改这两个参数。这对于大并发的Client/Server间通讯尤为重要。 在unix平台,修改qm.ini文件,添加如下所示(路径:/var/mqm/qmgrs/HQ_SVR):  Channels: MaxChannels = 3000   (最大通道数) MaxActiveChannels = 3000   (最大活动通道数) PipeLineLength=2 AdoptNewMCA=ALL 然后重启MQ

//定义持久性队列: DEFINE QLOCAL(QNAME) DEFPSIST (YES) REPLACE

传输队列管理 ################################################## 1:定义传输队列 DEFINE QLOCAL(Q_TRANSFER) USAGE(XMITQ) 注: Q_TRANSFER:传输队列名

下面定义一个输入队列并带触发器 DEFINE QLOCAL(Q_TRANSFER) USAGE(XMITQ) DEFPSIST(YES)  INITQ(SYSTEM.CHANNEL.INITQ) TRIGDATA(DP_RCHANNEL) REPLACE 注: 参数1:传输队列名称(Q_TRANSFER) 参数5:触发器数据(DP_RCHANNEL),也就是触发后要启动的通道。

2:在传输入队列上定义触发器 DPCIS_Q_TRANSFER:传输队列 触发器数据:DP_RCHANNEL,即:发送通道,触发时启动该通道 alter qlocal(DPCIS_Q_TRANSFER) TRIGDATA('DP_RCHANNEL') TRIGTYPE(every) TRIGGER initq('SYSTEM.CHANNEL.INITQ')

远程队列管理 ################################################## 通过输入以下命令来定义远程队列定义: define qremote(Q1) rname(Q1) rqmname(QM_APPLE) xmitq(QM_APPLE) 注: 参数1:队列名称(发送方远程队列名) 参数2:远程队列(接收方的本地接收队列名) 参数3:远程队列管理器(接收方队列管理器名) 参数4:传输队列(发送方传输队列名)

通道管理 ################################################## 1:创建接收方通道 DEFINE CHANNEL(SDR_ TEST)  CHLTYPE(RCVR)  REPLACE  define channel(Q_R_CHANNEL2) chltype(RCVR) replace 注: 参数1:接收方通道名称 replace:表示有该通道了替换

2:创建发送方通道  DEFINE CHANNEL(SDRNAME)  CHLTYPE(SDR)  CONNAME (‘100.100.100.215(1418)’)  XMITQ(QTNAME)  REPLACE 其中CHLTYPE可以是:SDR、SVR、RCVR、RQSTR、CLNTCONN、SVRCONN、CLUSSDR和CLUSRCVR。

define channel(DP_RCHANNEL) chltype(SDR) conname('10.101.2.3 (1414)') xmitq(Q_TRANSFER) replace 注: 通道名称:DP_RCHANNEL (发送方通道的名称)  传输队列:Q_TRANSFER  (发送方传输队列的名称)

3:启动通道 start channel(QM_ORANGE.QM_APPLE)

4:查看通道状态 dis chs(*)

侦听器管理 ################################################## 1:定义侦听器 DEFINE LISTENER(TCPLS1) TRPTYPE(TCP) PORT(1414)  REPLACE

2:启动侦听器 start listener(TCPLS1) 3:显示侦听器信息 display listener(tcpls1) 创建触发 ################################################## 一般设置MQ触发器的目的有两种, 一是自动启动发送端通道, 二是监视队列消息, 一旦发现新的消息, 则利用触发器启动相应的处理进程 如果是利用触发器自动启动发送端通道, 使用方法1, 如果是利用触发器启动用户进程, 使用方法2

方法1 A 在传输通道上设置触发器, 打开触发器控制, 类型为"第一个" B 初始队列为SYSTEM.CHANNEL.INITQ, 该队列为MQ专用的通道启动队列, 不需要手工启动其触发监视器 C 触发器数据为发送端通道名称, 例如 QAG.50 D 在发送端通道不活动的情况下, 在传输通道放入消息测试

方法2 A 创建一个触发启动队列, 其模板为SYSTEM.DEFAULT.INITIATION.QUEUE runmqsc define qlocal (MQ.TRIGER.INIQUEUE) like (SYSTEM.DEFAULT.INITIATION.QUEUE) B 定义进程 所谓进程就是触发器要触发的程序本例中进程名称:TRIGER.PROGRAM 应用程序标识为:"Notepad.exe" C 在队列上设置触发器, 一般为本地队列, 打开触发器控制, 类型根据自己的需要选择"第一个", "每个" 还是 "根据消息数量" D 初始队列选择A中创建的触发启动队列, 例如MQ.TRIGER.INIQUEUE, 进程名称设置为B中定义的进程名称, 例如TRIGER.PROGRAM E 启动触发监视器 runmqtrm -m QAGWY -q MQ.TRIGER.INIQUEUE F 在本地队列放入消息进行测试

方法2也可以完成方法1的工作, 只需要将进程定义中的应用程序标识改为 runmqchl -m QAGWY -c QAG.50 就可以了, 但MQ中提供了专用的通道启动队列, 而该队列不需要手工启动触发监视器, 因此方法1比方法2的步骤要少, 配置也简单, 所以在利用触发器自动启动发送端通道的情况下, 还是方法1更好.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Greenplum

Linux 常用命令(四)

# Default runlevel. The runlevels used are:

29800
来自专栏FreeBuf

深入解析新型加密货币挖矿恶意软件ZombieBoy

延续了2018年加密货币挖矿恶意软件的趋势,我发现了另一种类似于5月初发现的“MassMine”的挖矿恶意软件。我把这个家族称为ZombieBoy,因为它使用了...

14120
来自专栏java架构学习交流

从事务角度粗窥架构的可扩展性和可维护性:内容整理自java web轻量级开发面试教程

    大家多少了解过架构,也听说过使用架构后,代码和可维护性和重用性能大大提升。这里我们来通过一些关于事务的实例,来感性地体会下架构带来的在可维护性方面的便利...

21870
来自专栏草根专栏

使用Identity Server 4建立Authorization Server (5)

之前的配置都是在内存中, 下面将如何把这些数据存储到Sql Server数据库, 这样更适合生产环境. 这部分基本完全参考官方文档: https://ident...

40250
来自专栏张戈的专栏

零门槛!使用Docker快速部署ES集群

自从接触 Docker 之后,对 Docker 简直是爱不释手,做什么都是行云流水。遇到部署开源软件需求,第一时间想到的都是有没有现成的 Docker 镜像?能...

3.3K40
来自专栏Java面试通关手册

结合Spring发送邮件的四种正确姿势,你知道几种?

测试使用的环境是企业主流的SSM 框架即 SpringMVC+Spring+Mybatis。为了节省时间,我直接使用的是我上次的“SSM项目中整合Echarts...

15630
来自专栏实战docker

pinpoint插件开发之一:牛刀小试,调整gson插件

从本章开始我们一起来实战pinpoint插件开发,做一些实用的pinpoint插件,本着先易后难的原则,我们从修改现有插件开始吧; 准备工作 本次实战的操作环境...

37050
来自专栏精讲JAVA

搞定所有的跨域请求问题 : jsonp & CORS

网上各种跨域教程,各种实践,各种问答,除了简单的 jsonp 以外,很多说 CORS 的都是行不通的,老是缺那么一两个关键的配置。本文只想解决问题,所有的代码经...

17230
来自专栏Hadoop实操

如何使用Java API访问CDH的Kudu

56660
来自专栏杨建荣的学习笔记

MySQL主从不一致的修复过程(r10笔记第96天)

昨天发现一个5.7的MySQL从库在应用日志的时候报出了错误。从库启用过了并行复制。Last Error的内容为: Last_Error: Coordinato...

47190

扫码关注云+社区

领取腾讯云代金券