MQ配置文档说明手册


MQ 配置文档说明手册
第一章 中间件消息通信技术概要 一、中间件 中间件,就是介于应用系统与系统软件之间的一类软件,它使用系统软件所提供的基础 功能,衔接于应用系统的不同部分,能够达到资源共享和功能共享的目的。 消息中间件,是中间件众多产品分类中一个重要部分。它能够适用于任何需要进行网络 通信的系统,负责建立网络通信的通道,进行数据或文件发送。消息中间件的一个重要作用 是可以实现跨平台操作,为不同操作系统上的应用软件集成提供服务。

二、几种通信技术的比较 1、CPI-C CPI-C 是一种同步对话通信模式。参加通信的一方发起一次对话,同时控制信息流动。 数据既可以由发送者传递到接受者,也可以反向流动。 参加通信的两个程序需要跟踪对话的状态,如果异常发生导致连接中断,则需要发送方 重建并恢复这次通话。通信双方既可以处于主从地位,也可以处于对等地位。也就是说, CPI-C 既支持客户端-服务器环境,也支持对等通信方式。 虽然 CPI-C 在一般情况下是一种同步通信类型,但是在一定环境中,如 CICS,可以通 过“临时数据队列”实现一定程度的异步。 TCP/IP,SNA 都支持 CPI-C。 由于需要应用程序参与错误的检测与恢复,CPI-C 的编程接口相当复杂。

2、RPC RPC,即远程过程调用,也是一种同步,对话方式的类型。一个调用程序向服务器提成 申请,该调用被负责通信的转接器发往远端系统。调用者与被调用者关系是固定的,很难实 现对等通信。 与 CPI-C 一样,通信错误需要应用程序自己维护。另外在申请服务得到响应之前,服务申 请者被阻隔,这不仅是应用的瓶颈所在,更有可能遭受拒绝式服务攻击。

3、MQI(Message Queue Interface) 消息队列接口为程序提供了一种异步通信方式。一个程序以一个队列作为中转与另一个 程序相互通信,这个队列向对于该程序而言既可以是本地,也可以是远程。当程序 A 与程 序 B 进行通信时,A 只需要将消息放入一条与 B 相通信的队列即可,至于消息何时,以何 种协议,何种方式到达程序 B 与 A 没有关系。底层的通信细节被接口所覆盖,甚至通信错

误的恢复也由队列管理器代劳了,应用程序自身感受不到通信的发生。 由于通信方式和使用的协议无关,因而可以使用各种标准协议,比如 TCP/IP,SNA 或 者其他局域网协议。 当程序 A 向 B 发送消息的时候,程序 B 不需要处于运行状态,消息队列负责了消息的转 达。而且一个程序可以通过不同的队列与多个程序进行通信。

三、Websphere MQ 简介 Websphere MQ 是 IBM 公司的商业通信中间件。它提供一个具有工业标准,安全、可靠 的消息传输系统,用以控制和管理一个集成的商业应用。Websphere MQ 基本由一个消息 传输体系和一套应用程序接口组成。

Websphere MQ 主要包含以下资源: 1、 消息:

消息就是一个信元单位。消息类型包含请求消息(Request Message)、应答消息(Reply Message)、报告消息(Report Message)、报文消息(Datagram Message)。另外,还有一类 特殊的消息叫做触发消息,它是触发机制的重要组成部分。 消息包含两部分构成:消息描述符与应用程序数据。消息描述符标示消息,并包含其他控制 信息,如消息类型和消息优先级;应用程序数据是消息的主体,它的内容与结构含义由使用 它的程序定义。

2、

队列

队列是消息的存储场所。 消息存放在队列中, 应用程序可以相互独立的运行, 以不同的速度、 在不同的时间地点进行消息通信。 队列按照功能划分, 主要包含十个大类: 本地队列、 远程队列、 传输队列、 动态与模板队列、 启动队列、群集传输队列、死信队列、命令队列、回复队列与别名队列。

3、

消息传输系统

确保队列之间的消息传递。包括队列管理与调度、消息传达,并保证网络故障后的恢复。传 输系统由队列、队列管理器、通道、进程、群集以及其他部分组成。 队列管理器是队列和其他对对象的容器。Websphere MQ 的每一个部分都属于一个队列管 理器,它是一个基本独立的执行单元,应用程序通过 MQI 编程接口向队列管理器申请服务。 通道, 是一种提供从一个队列管理器到另外一个队列管理器的通信途径。 它通过消息通道代 理(Message Channel Agents)把两个队列管理器连接起来。消息通道可以分为 6 种类型: 发送通道(Sender)、接受通道(Receiver)、服务器通道(Server)、请求器通道(Requester)、

群集发送通道(Cluster Sender)和群集接受通道(Cluster Receiver)。 除了消息通道,还有一种特殊的通道,称为 MQI 通道。MQI 通道是 Websphere MQ 客户端 和服务器上的队列管理器的通信通道, 当客户应用程序发出 MQCONN 或 MQCONNX 调用 时,才开始建立连接。 消息通道与 MQI 通道主要存在两点差别。首先,MQI 是双向通道,既可以发送请求,也可 以接受响应,而消息通道只能进行单向数据通信;另外,MQI 通道的通信是同步的,当 MQI 请求从客户端发送到服务器时,Websphere MQ 的客户端在发送下一个请求必须等待来自 服务器的响应。而消息通道的数据传输的异步的,与时间无关。

4、

应用程序接口

消息系统与应用程序之间通过一系列 Websphere MQ API 来实现。API 只有 14 个调用,2 个关键字:PUT 和 GET。

第二章 IBM MQSeries 的触发机制 一、 触发器原理 触发(Triggering),是一种自动启动应用程序的机制。 队列管理器把某种条件称为触发事件。如果队列被设置为触发类型,并且触发事件发生了, 那么队列管理器将发送一个触发消息到一个称作启动队列的队列中。 触发消息被放置到启动 队列的过程意味着产生了触发事件。

处理队列管理器中的消息是触发监控程序(Trigger-Monitor Application), 他的工作是读取 触发消息并根据触发消息的信息做出相应的处理。 触发监控程序没有什么特殊, 它只不过是 启动队列读取消息的应用程序。

当队列管理器发现由一条消息到达被触发的队列之后, 它产生的触发消息将被存放到启动队 列中,触发监控程序将从启动队列中取出触发消息,并根据触发消息中的内容,启动相应的 消息处理程序来处理被触发队列中的消息。

触发所涉及的对象如下: 1 应用队列:一个本地队列并设置为可触发。当触发条件满足时,将会产生触发消息。 2 进程定义:一个应用队列可能由一个进程定义对象和它关联。进程定义中包含应用程 序的信息。该应用程序负责从应用队列中取出消息。 3 传输队列:如果用触发方式来启动通道,则需要一个传输队列。在传输队列的 TriggerData 属性中设置为将被启动的通道名,这将省略进程的定义。 4 触发事件:它是一种引起队列管理器产生触发消息的事件。

5 触发消息:当触发事件发生时,队列管理器将产生触发消息。触发信息来自于应用队 列和于应用队列关联的进程定义,它包含了将要被启动的程序名。 6 启动队列:一个本地队列。被用来存发触发消息的队列。一个队列管理器可用拥有多 个启动队列。一个启动队列可以为多个应用队列服务。 7 触发监控器:是一个持续运行的程序,当一个触发消息到达启动队列时,触发监控器 获取触发消息,并利用触发消息中的信息,启动应用程序来处理应用队列中的消息,并把触 发消息头发送传递给应用程序,消息头中包含应用队列名。

在所有平台上,都有一个特殊的触发监控器叫做通道启动器(Channel Initator),它的 作用就是启动通道。

二、触发类型 1、EVERY: 应用队列中每接受到一个消息时,都将产生触发消息。如果应用程序仅仅处理一个消息 就结束,可采用这种触发类型。

2、FIRST: 应用队列中消息从 0 变为 1 时会触发事件。如果当队列中的一个消息到达时启动程序, 直到处理完所有消息才结束,则采用这种触发类型。

3、DEPTH: 应用队列中消息数目和 TriggerDepth(引起触发事件发生时,队列中的消息数目)属性 值相同时,才会产生触发事件。当一系列请求的回复都收到时,才启动应用程序,则可以采 用这种方法。 需要注意的时,当 DEPTH 属性值为 0 的时候,实际上就形成了同步通信。另外,当采 用 Depth 触发时,产生触发消息以后,队列将被修改为非触发方式,如果需要再次触发, 需要重新设置成允许触发。

一般而言,在实际应用中,如果通道设置成触发方式,触发类型往往设置成为 FIRST 和 DEPTH。

三、触发器工作流程

1、

本地或远程应用程序 A,往应用队列(Application Queue)中 PUT 了一条消息。

2、

当队列原来深度为 0 时(队列为空),这是 PUT 一条消息到队列中将形成触发事件,

同时产生一条触发消息,触发消息中将包含进程定义中的信息。 3、 队列管理器创建触发消息,并把它 PUT 入与应用队列相关的启动队列 Initiation

Queue。 4、 5、 6、 触发监控器(Trigger Monitor)从启动队列(Initiation Queue)中 GET 触发消息。 触发监控器处理触发消息,发出启动应用程序 B 的命令。 应用程序 B 打开应用队列(Application Queue),并处理队列中的消息。

第三章 MQ 配置说明文档 安装系统后,以 administrator 进入; 安装完,自动生成 mqm 组; 将 administrtor 加入 mqm 组,或定义 mqm 用户,将 mqm 用户加入 mqm 和 admin 组; 重启,以 administrator(或 mqm)进入;

需要更改系统配置文件,使得 1414 端口被监听(不过启动通道之前仍需启动监听器) 进入系统目录 /winnt/system32/drivers/etc/services, 加入 MQSeries 1414/tcp #MQSeries channel listener

如果实在 AIX 环境下,则添加字符串改为 MQSeries stream tcp nowait root /usr/lpp/mqm/bin/amqcrsta amqcrsta –m AIX ********root 为 mq 用户名,AIX 为 mq 管理器****** 改好后,refresh –s inetd

最后,管理器的 CCSID 要一样,DIS QMGR ***查看*** ALTER QMGR CCSID(437) ***437 为西文字符集***

下面的步骤需要在 DOS 环境下进入 MQ 的安装目录/bin

示例一(本机 SDR 通道, 接受端 RCVR 通道) 在发送方 A (本机:127.0.0.1) 1) 建立队列管理器 QMA: crtmqm QMA 2) strmqm QMA runmqsc QMA 3) 定义本地传输队列: define qlocal (QAQB) usage (xmitq) defpsist(yes) REPLACE 4) 创建远程定义: define qremote (QR.TOB) rname (LQB) rqmname (QMB) xmitq (QAQB)

REPLACE //远程定义(本地队列管理器):QR.TOB //远程队列名称:LQB //远程队列管理器名称:QMB //传输队列名称:QAQB 5) 定义死信队列 ALTER QMGR DEADQ(QMA.DEADQ) DEFINE QL(QMA.DEADQ) REPLACE 6) 定义发送通道: define channel (A.TO.B) chltype (SDR) conname ('192.168.0.198(1414)') xmitq (QAQB) trptype (tcp) // define channel (A.TO.B) chltype (SDR) conname ('127.0.0.1(1414)') xmitq (QAQB) trptype (tcp) REPLACE 7)end //退出 MQSC 命令环境

8)runmqlsr –t TCP –M QMA //启动监听器 9)runmqchl –c A.TO.B –m QMA //注意:启动此步之前,需要保证 QMB 上的通道定义完成并且侦听器在 QMB 上已经启动

在接收方 B:( 假设为: 192.168.0.198:1414 / 127.0.0.1:1414) 1) 建立队列管理器 QMB: crtmqm QMB 2) strmqm QMB 3) RUNMQSC QMB 4) 定义死信队列 ALTER QMGR DEADQ(QMB.DEADQ) DEFINE QL(QMB.DEADQ) REPLACE 5) 定义本地队列 LQB: define qlocal (LQB) DEFPSIST(YES) REPLACE 6) 创建接收通道: define channel (A.TO.B) chltype (RCVR) trptype (tcp) REPLACE 7)end //退出 MQSC 命令环境

—————— 测试验证 —————— AMQSPUT QR.TOB QMA //在 QMA 队列管理器的 QR.TOB 远程定义中输入一些消息数据 AMQSGET LQB QMB //在 QMB 队列管理器的 LQB 本地消息队列中读取通过管道 A.TO.B 传递过来的数据

关于通道: 通道是 MQ 的关键,主要包括手动方式启动和自动方式(触发)启动。

手动方式:手动方式维护有两个通道参数值得注意: 1)DISCINT(Disconnect Interval, 断开间隔) 当传输队列中没有消息要传送时, 发送方通道(SDR)、服务器通道(SVR)将在等待了该 参 数指定的时间间隔后断开连接,停止通道。该参数以秒为单位,定义新的通道时,如果没有 特别指定,该参数会继承系统对象的属性,设为 6000 秒,约两个小时。亦通道连续两个小 时没有消息发送后就会停止。DISCINT 参数设定为 0,通道永远不会停止。

2)HBINT(Heart Beat Interval,心跳间隔) 当传输队列中没有消息要传送时,发送方通道(SDR)、服务器通道(SVR)定时向对方发送心 跳测试信号,双方通道借这个信号作消息发送事务的同步(quiesce)。通常这个参数的值要 比 DISCINT 参数的值小很多,让通道程序有机会在停止之前作多次的事务同步较验。 假如系统管理员为了避免反复重新启动通道而把 DISCINT 参数设定为 0,但通道运行期间 网络线路发生了故障,通讯双方不能交换心跳信号,通道也会停止, 仍然要求系统管理员 监控网络线路状态和通道状态, 在网络线路收复后重新启动。 也可以编写专门的监控程序自 动执行这些工作,但都比较复杂。

系统管理员不能因为交换心跳信号失败会导致通道停止就把 HBINT 设为 0 或设为极大的 值,当有消息要通过通道发送出去,但网络线路又发生故障时,发送通道会停止,但接收通 道不会停止。所以下次系统管理员再启动通道时会发现 MQ 报告出错信息“远程节点不可用 或资源不足”,这不是因为远程节点的连接有问题,或内存资源不足,而是因为远程节点上 的接收通道没有停止, 启动发送通道时发现对方节点上同名的通道还在运行, 就禁止本地的 发送通道启动。系统管理员只好在远程节点上停止接收通道(用 STOP CHANNEL 命令)。

正常情况下并不推荐使用 STOP CHANNEL 命令,该命令把通道置于 STOPPED 状态,实 际上是不可用状态。为了重新使用该通道,系统管理员要输入 START CHANNEL 命令, 但这条命令并没有真正地启动通道,要在发送方输入 START CHANNEL 命令才能启动通 道。必须注意的是,STOP CHANNEL 命令与 START CHANNEL 命令对接收通道都是没有 实际意义的,只是修改了通道的状态。

常用命令 创建队列管理器

crtmqm –q QMgrName -q 是指创建缺省的队列管理器 删除队列管理器 dltmqm QmgrName 启动队列管理器 strmqm QmgrName 如果是启动默认的队列管理器,可以不带其名字 停止队列管理器 endmqm QmgrName 受控停止 endmqm –i QmgrName 立即停止 endmqm –p QmgrName 强制停止 显示队列管理器 dspmq –m QmgrName 运行 MQSeries 命令 runmqsc QmgrName 如果是默认队列管理器,可以不带其名字

往队列中放消息 amqsput QName QmgrName 如果队列是默认队列管理器中的队列,可以不带其队列管理器的名字 从队列中取出消息 amqsget QName QmgrName 如果队列是默认队列管理器中的队列,可以不带其队列管理器的名字 启动通道 runmqchl –c ChlName –m QmgrName

启动侦听 runmqlsr –t TYPE –p PORT –m QmgrName

停止侦听 endmqlsr -m QmgrName

MQSeries 命令 定义死信队列 DEFINE QLOCAL(QNAME) DEFPSIST(YES) REPLACE

设定队列管理器的死信队列 ALTER QMGR DEADQ(QNAME) 定义本地队列 DEFINE QL(QNAME) REPLACE 定义别名队列 DEFINE QALIAS(QALIASNAME) TARGQ(QNAME) 远程队列定义 DEFINE QREMOTE(QRNAME) + RNAME(AAA) RQMNAME(QMGRNAME) + XMITQ(QTNAME) 定义模型队列 DEFINE QMODEL(QNAME) DEFTYPE(TEMPDYN) 定义本地传输队列 DEFINE QLOCAL(QTNAME) USAGE(XMITQ) DEFPSIST(YES) + INITQ(SYSTEM.CHANNEL.INITQ)+ PROCESS(PROCESSNAME) REPLACE

创建进程定义 DEFINE PROCESS(PRONAME) + DESCR(‘STRING’)+ APPLTYPE(WINDOWSNT)+ APPLICID(’ runmqchl -c SDR_TEST -m QM_ TEST’) 其中 APPLTYPE 的值可以是:CICS、UNIX、WINDOWS、WINDOWSNT 等

创建发送方通道 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(SDR_ TEST) CHLTYPE(RCVR) REPLACE

创建服务器连接通道 DEFINE CHANNEL(SVRCONNNAME) CHLTYPE(SVRCONN) REPLACE

显示队列的所有属性 DISPLAY QUEUE(QNAME) [ALL]

显示队列的所选属性 DISPLAY QUEUE(QNAME) DESCR GET PUT DISPLAY QUEUE(QNAME)MAXDEPTH CURDEPTH

显示队列管理器的所有属性 DISPLAY QMGR [ALL]

显示进程定义 DISPLAY PROCESS(PRONAME)

更改属性 ALTER QMGR DESCR(‘NEW DESCRIPTION’) ALTER QLOCAL(QNAME) PUT(DISABLED) ALTER QALIAS(QNAME) TARGQ(TARGQNAME)

删除队列 DELETE QLOCAL(QNAME) DELETE QREMOTE(QRNAME)

清除队列中的所有消息 CLEAR QLOCAL(QNAME)

常用补充命令 显示队列管理器 dspmq 显示文件名 dspmqfls

启动本地队列管理器 strmqm 结束本地队列管理器 endmqm 启动通道启动进程 runmqchi/runmqchl


相关文档

更多相关文档

mq配置文档
MQ配置管理手册
MQ配置说明
MQ for Linux 安装配置手册
2.0环境MQ配置说明文档
MQ 服务器配置与测试手册
IBM MQ 和 Message Broker 安装配置手册
MQ(gcc)安装说明文档
首都机场中间件安装部署说明_WAS&MQ&MB文档1.2
新公文交换使用说明手册
MQ日常维护手册
MQ 安装手册
MQ配置管理手册
MQ 服务器配置与测试手册
MQ教程
电脑版