迁移 WebSphere MQ 队列管理器的一些办法

迁移 WebSphere MQ 队列管理器的一些办法

MQ 队列管理器迁移概述

通常来说,有两种方式可以对 MQ 队列管理器进行迁移。一种是基于相同平台的文件复制(或者称为克隆),另一种是使用 MQ 提供的命令行。两种方式各有优缺点。

文件复制方式,它的好处是快速,可以批量。但缺点是只支持同种类型的操作系统间的复制,无法实现跨平台复制,并且在目标队列管理器上要使用相同的用户名。比如,在 Linux 上复制的队列管理器对象无法还原到 Windows 的 队列管理器上,在 32 位队列管理器对象无法在 64 位的队列管理器上使用。简单来说,源系统和目标系统必须是完全一样的两台机器。这样的迁移更像是克隆出一个新的 MQ 队列管理器,除了队列管理器对象定义被克隆之外(其中包括队列,通道,监听器等),队列管理器本身的属性值也会被克隆,同时持久化队列的消息也会被克隆。

MQ 命令行方式 使用 MQ 命令进行队列管理器对象复制或备份,不同的 MQ 版本提供不同的命令。 在 MQ v6 和 MQ v7.0 版本下,需要预先安装 MS03 SupportPac,安装后使用 saveqmgr命令。在 MQ v7.1 和 MQ v7.5 中,使用 MQ 内置的 dmpmqcfg命令,它替代了 MS03 SupportPac,无需额外安装。使用基于 MQ 命令行提供的对象复制好处有很多:

第一,它可以支持跨平台对象导入和导出。比如,在 Windows 上导出的队列管理器对象可以很方便的在 Linux/Unix 上导入。

第二,方便问题重现。导出的文件包含对象列表和权限列表,前者可以直接做为 runmqsc命令的输入参数,后者可以做为脚本直接运行,这大大方便了 IBM 技术支持工程师在实验室重现客户环境,快速解决问题。

第三,可用于本地队列管理器重建。即使不用于远程恢复,导出的对象列表也可以在本地重建 (re-play)。这种情况适用于多版本 MQ 安装时的情况。用户可从某一个版本的队列管理器中将对象导出,在另一个版本的队列管理器中重建相同的对象列表。

相比文件复制法,使用命令需注意如下几点:

第一,在不同平台间复制队列管理器对象时,尽管绝大多数的队列管理器对象并没有平台特定的信息,但个别参数仍然需要经过修改(比如队列管理器的 SSLKEYR 属性,指定了本地的 SSL/TLS 存储库的路径)。在还原到目标队列管理器前,最好仔细检查所有对象定义命令,确保无误。

第二,队列中的消息无法复制。无论是持久化队列或者非持久化队列,其中的消息均无法得到复制。

使用文件复制方式建立队列管理器对象

如前所述,使用文件复制方式需要保证源队列管理器和目标队列管理器使用同一种架构平台。 需要复制的文件和目录包括队列管理器配置文件 mqs.ini, 队列管理器日志文件和队列管理器数据目录。需要注意的是,复制时需最好停止队列管理器,以确保新旧队列管理器的队列中的消息保持一致。

以下是使用文件复制方式建立队列管理器对象的步骤:

在 Linux 平台创建队列管理器 test.queue.manager, 导入测试对象后将队列管理器停止,将其日志文件和数据文件打包,连同 MQ 配置文件 mqs.ini 复制到目标机器部署,完成复制过程。

源队列管理器端 (Linux)

清单 1.创建测试队列管理器并导入测试对象

-bash-4.1$ crtmqm test.queue.manager

-bash-4.1$ strmqm test.queue.manager

-bash-4.1$ runmqsc test.queue.manager < objects.tst

清单 2.备份队列管理器日志,数据文件和配置文件

-bash-4.1$ endmqm -i test.queue.manager

-bash-4.1$ cd /tmp

-bash-4.1$ tar -cvf test.queue.manager.log.tar /var/mqm/log/test!queue!manager/

-bash-4.1$ tar -cvf test.queue.manager.data.tar /var/mqm/qmgrs/test!queue!manager/

-bash-4.1$ cp /var/mqm/mqs.ini /tmp

目标队列管理器端 (Linux)

清单 3.解压队列管理器数据文件和日志文件

-bash-4.1$ crtmqm test.queue.manager

-bash-4.1$ cp /tmp/mqs.ini /var/mqm/

-bash-4.1$ tar -xvf test.queue.manager.log.tar -C /var/mqm/log

-bash-4.1$ tar -xvf test.queue.manager.data.tar -C /var/mqm/qmgrs

手工查看 /var/mqm/mqs.ini文件和 /tmp/mqs.ini文件,将新队列管理器信息加入到 QueueManager 配置项下:

QueueManager:

Name=test.queue.manager

Prefix=/var/mqm

Directory=test!queue!manager

InstallationName=Installation1

清单 4.检查队列管理器配置信息和对象是否存在

-bash-4.1$ strmqm test.queue.manager

-bash-4.1$ runmqsc test.queue.manager

dis qlocal(*)

队列管理器恢复成功。

值得一提的是,持久化队列的消息在队列管理器停止时是可以保存的,因此消息也可以一起被复制到新的队列管理器的队列上。如果是非持久化队列(默认情况),队列管理器停止时消息不会被保存,因此也不会被克隆。如果希望队列管理器中的消息随着队列管理器一起被克隆,则需要将队列属性 defpsist 更改为 YES,请参考附录 1:”持久化信息存储”文章。

另外,在目标系统中,如果新系统的 MQ 是新安装的,则可以直接将源系统的 mqs.ini 文件复制替换旧的文件。如果新系统中已经存在任何队列管理器,在克隆时要谨慎,需要按照目标队列管理器中第四步手工将复制的队列管理器信息添加到目标队列管理器中,不能直接覆盖,否则会导致其他队列管理器无法启动的问题。在这种情况下,另一个推荐做法是使用命令法导入队列管理器的对象。

使用 saveqmgr 命令保存队列管理器对象

如前所述,MQ 6.0 和 7.0 版本提供了 SupportPac MS03,安装后可以使用 saveqmgr命令来保存队列管理器对象的属性。对于 MQ 7.1 和 7.5, 请使用 dmpmqcfg命令,这在下面的章节有介绍。关于 MS03 的下载地址,请参考附录 2。以下介绍一个例子,使用 saveqmgr命令将 Linux 端的源队列管理器中的对象导出,在 Windows 的目标队列管理器中导入。

源队列管理器端 (Linux)

假设将下载好的 SupportPac MS03 放在源队列管理器的 /tmp 目录下,安装 SupportPac MS03

清单 5.解压缩安装 SupportPac MS03

-bash-4.1$ cd /tmp

-bash-4.1$ tar -zxvf ms03_unix.tar.Z

清单 6.saveqmgr 命令导出队列管理器对象定义

-bash-4.1$ crtmqm mq701.queue.manager

-bash-4.1$ strmqm mq701.queue.manager

-bash-4.1$ runmqsc mq701.queue.manager < objects.tst

-bash-4.1$ ./saveqmgr.linux –localQMgr mq701.queue.manager

– outputFile /tmp/mq701.queue.manager.mqsc –saveSecurity /tmp/mq701.queue.manager.bat

输出:

Compiled for Websphere MQ V7.0.1.0 on Oct  9 2011

SAVEQMGR V6.1.4.0

Requesting attributes of the queue manager…

Writing Queue Manager definition to /tmp/mq701.queue.manager.mqsc.

Generating attributes for Websphere MQ Release 7.0.1

Generating code for platform UNIX

Requesting attributes of all authinfo objects…

Requesting attributes of all queues…

Requesting attributes of all channels…

Requesting attributes of all processes…

Requesting attributes of all namelists…

Requesting attributes of all listeners…

Requesting attributes of all services…

Requesting attributes of all OAM classes…

Requesting attributes of all topics…

Requesting attributes of all subscriptions…

Writing AuthInfo definitions to /tmp/mq701.queue.manager.mqsc.

Writing Queue definitions to /tmp/mq701.queue.manager.mqsc.

Skipping dynamic queue SAVEQMGR.51B468B120033602

Writing Channel definitions to /tmp/mq701.queue.manager.mqsc.

Writing Process definitions to /tmp/mq701.queue.manager.mqsc.

Writing Namelist definitions to /tmp/mq701.queue.manager.mqsc.

Writing Listener definitions to /tmp/mq701.queue.manager.mqsc.

Writing Service definitions to /tmp/mq701.queue.manager.mqsc.

Writing OAM definitions to /tmp/mq701.queue.manager.aut.

Writing Topic definitions to /tmp/mq701.queue.manager.mqsc.

Writing Subscription definitions to /tmp/mq701.queue.manager.mqsc.

命令选项含义:

–localQmgr:连接的本地队列管理器名称

–outputFile:生成的包含队列管理器对象定义的文件名

–saveSecurity:生成的包含队列管理器对象安全定义的脚本

注意:

在 Linux/Unix 上,请使用具有 MQ 管理员权限用户(默认为 mqm)执行 saveqmgr命令, 并保证用户对 ms03 目录具有相应的读写权限,必要时需使用 chmod命令赋予相应读写权限

队列管理器必须在运行状态下

使用 –saveSecurity参数可以将队列管理器的每个对象的权限属性一起导出来,它们是 setmqaut命令集,可以直接运行在目标机 MQ 命令行

64 位的队列管理器下请使用 saveqmgr64.linux

关于 saveqmgr命令的详细用法,请参考 readme 文件或使用 -h 参数以获得帮助。

目标队列管理器端 (Windows)

将生成的对象定义文件和权限定义文件复制到目标 MQ 队列管理器端。

打开 Windows 命令提示符,输入以下命令执行:

清单 7.目标端导入对象定义

1 runmqsc mq701.queue.manager < mq701.queue.manager.mqsc

打开 Windows 命令提示符,执行:

mq701.queue.manager.bat

-bash-4.1$ runmqsc test.queue.manager

dis qlocal(*)

使用与清单 4 相同的方式检查对象是否导入成功。

注意事项:

目标队列管理器端需要手工创建同名的队列管理器,并处在运行状态。

本例的导出端和导入端在不同平台,建议导入前打开生成的对象定义文件,逐一检查每条命令中是否含有路径的属性,避免一些带有 Linux 的路径的属性在 Windows 上无法识别而出错。

本例在测试中发现,在 Linux 下生成的对象权限脚本的对象名 (-n) 后默认带有单引号。这有可能会造成在 Windows 导入时找不到对象名称。此时简单的方法就是去掉单引号即可。比如:将如下命令:

清单 8.示例 setmqaut 命令

setmqaut -m mq701.queue.manager -n ‘GSYHQ1’ -t queue -g mqm

+browse +chg +clr +dlt +dsp +get +inq +put +passall +passid +set +setall +setid

修改为:

清单 9.修改后的 setmqaut 命令

setmqaut -m mq701.queue.manager -n GSYHQ1 -t queue -g mqm

+browse +chg +clr +dlt +dsp +get +inq +put +passall +passid +set +setall +setid

使用 dmpmqcfg 命令保存队列管理器对象

在 MQ 7.1 和 MQ 7.5 版本中,使用 MQ 内置的 dmpmqcfg命令来导出队列管理器的对象定义,它是 saveqmgr命令的替换版本。它不用额外安装,MQ 安装完成后即可使用。以下使用一个简单的例子描述使用 saveqmgr命令在源队列管理器端生成对象定义文件和权限信息文件,然后在目标队列管理器中导入对象定义文件和权限信息文件,完成队列管理器的复制。

源队列管理器端 (Linux)

清单 10.dmpmqcfg 导出队列管理器对象定义

-bash-4.1$ dmpmqcfg -m test.queue.manager -a > test.queue.manager.dump

清单 11.dmpmqcfg 导出队列管理器对象权限定义

-bash-4.1$ dmpmqcfg -m test.queue.manager -o setmqaut > test.queue.manager.aut

目标队列管理器端 (Linux)

将生成的 .dump 文件和 .auth 文件复制到目标机器,更改文件的属主和执行权限,确保文件在目标机上可以执行,使用 MQ 管理员用户 (mqm) 建立并启动新的同名队列管理器,使用 runmqsc命令导入对象,并执行赋予权限,此处步骤和清单 7 和清单 8 相同,不再赘述。然后使用和清单 4 相同的方式检查对象和权限是否正确导入。

总结

本文介绍了使用文件复制和 MQ 命令行方式复制队列管理器对象的技术,这两种方法分别有适用的场景。使用 MQ 命令行方法,如果一旦出现问题,IBM 技术支持部门会更方便的重现和定位迁移过程中出现的问题,有利于问题的快速定位和解决,希望本文能够对迁移 MQ 队列管理器感兴趣的读者起到一些帮助作用。

Win7-IBM Websphere MQ7 虚拟机下载

本博主已经安装与配置好的windows7 环境下的mq7虚拟机环境,链接:https://pan.baidu.com/s/1YJpcQbkO0fo27i_ZHfe6nQ
提取码:yrxc
下载后,解压后,可以用vmware workstaion 打开,直接使用。

MQ帮您搭建企业服务总线(ESB)的基础传输层。IBM WebSphere MQ为SOA提供可靠的消息传递。它为经过验证的消息传递主干, 全方位、 多用途的数据传输, 并帮助您搭建企业服务总线的传输基础设施。
消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。
IBM WebSphere MQ 支持两种不同的应用程序编程接口:Java 消息服务(JMS)和消息队列接口(MQI)。在 IBM WebSphere MQ 服务器上,JMS 绑定方式被映射到 MQI。应用程序直接与其本地队列管理器通过使用 MQI 进行对话,MQI 是一组要求队列管理器提供服务的调用。MQI 的引人之处是它只提供 13 次调用。这意味着对于应用程序编程员它是一种非常易于使用的接口,因为大部分艰苦工作都将透明完成的。
IBM WebSphere MQ 产品支持应用程序通过不同组件如处理器、子系统、操作系统以及通信协议的网络彼此进行通信。

功能编辑
· 跨任何商业IT系统连接应用程序和Web服务, 提供完整的JMS(Java消息服务)支持 [1] , 包括发布-订阅。
· 对Web服务的整合化支持。
· 基于Eclipse的新工具—MQ Explorer, 适用于Windows和Intel(x86), 支持整个消息传递主干的远程和安全配置。
· WebSphere MQ V6.0.2增强了JMS和安全性, 构建在WebSphere MQ V6.0中引入的新配置工具之上, 该工具以新Eclipse插件的形式提供, 可增强您的MQ Explorer控制台。
· 与WebSphere Application Server的消息传递服务无缝互操作。
· 支持行业标准安全套接字层(Secure Sockets Layer, SSL)安全性, 并提供扩展安全版本来获得高级安全特性。
· 支持推进现有FTP基础设施, 确保通过WebSphere MQ进行可靠、 安全的文件传输。
· 支持的操作系统: AIX、 HP Unix、 i5/OS、 Linux、 Sun Solaris、 Windows、 z/OS。
操作程序编辑
第一步是让应用程序与队列管理器连接。它通过 MQConnect 来进行此连接。下一步调用 MQOpen 为输出打开一个队列。然后应用程序调用MQPut 将其数据放到队列上。要接收数据,应用程序调用 MQOpen 打开输入队列。应用程序调用MQGet 从队列上接收数据。

在开始之前,让我们先来确定使用 WebSphere MQ 解决的业务问题的种类,并了解 WebSphere MQ 如何能够帮助您满足业务要求。

问题:自动化孤岛

在大多数业务中,业务的信息技术 (IT) 基础结构中存在许多不同的技术。系统由这些来自许多供应商的不同的技术组成,并且具有不同的硬件平台、编程语言、操作系统和通信链路。通常,连接不同的系统非常复杂并且可能代价高昂,所以许多系统之间都相互隔离。

目前,越来越多的业务还需要以电子的方式与其客户和供应商进行通信,而这些客户和供应商可能比该业务本身使用了更多不同的技术。因此,需要某种简便的、廉价的和可靠的机制用来连接这些异类的系统(“自动化孤岛”),以便在内部和外部对业务的 IT 基础结构进行集成。

解决方案:WebSphere MQ

通过提供一种程序到程序的通信方式,WebSphere MQ 非常适合于上面所描述的环境。图 1 显示了这种通信方式的基本机制。

程序 A 准备好一条消息,并将其放入队列。然后,程序 B 从该队列中获取消息,并对其进行处理。这两个程序都使用一种应用程序编程接口 (API) 与该队列进行交互。WebSphere MQ API 称为消息队列接口 (MQI)。任何一个程序都无需了解对方的存在,并且这两个程序无需同时执行。如果程序 A 在程序 B 尚未执行的时候将一条消息放入队列,那么该队列将存储这条消息,直到程序 B 开始执行并准备处理这条消息。类似地,当程序 B 从队列中检索消息时,程序 A 可能已经不再处于执行状态。

应用程序设计

使用 WebSphere MQ 提供的基本通信机制,可以进行同步和异步的应用程序设计。

在同步的应用程序设计中,如图 2 所示,假定同时执行这两个应用程序。程序 A 向队列 1 发送一条消息并等待应答。程序 B 检索得到该消息,并对它进行处理,然后将应答消息发送到队列 2 中,以便程序 A 进行检索。在使用 WebSphere MQ 设计应用程序时,通常每个程序使用不同的队列向其他程序发送消息。虽然这不是必需的,但这样可以提供更简单的应用程序设计和编程逻辑。另外请记住,这里假定两个程序同时执行。如果当程序 A 发送消息时,程序 B 没有执行,那么程序 A 将阻塞,直到程序 B 启动并对消息进行处理。这是同步应用程序通信中的设计问题。

在异步应用程序设计中,如图 3 所示,程序 A 再次将消息放到队列 1,以便程序 B 对其进行处理,但现在,程序 C 与程序 A 进行异步地操作,它检索消息并对其进行处理。通常,程序 A 和程序 C 是相同应用程序中的不同部分。

对于 WebSphere MQ 来说,异步设计是一种非常合适的模型。程序 A 将消息放到队列中,并继续执行,即使程序 B 并不对这些消息进行处理,也是如此。在这种情况下,队列将存储这些消息,直到程序 B 重新启动。这种模型有一种变种,即程序 A 将一条或多条消息放到队列中,并继续进行其他的处理,然后返回来检索和处理应答消息。

程序之间的这种通信方式称为消息传递。它与其他通信方式(如对话式的通信或调用和返回通信)的不同之处在于,进行通信的程序之间具有时间独立性。程序接收消息作为输入,并输出其结果作为消息,而不需要同时运行发送或接收程序。

本博主已经安装与配置好的windows7 环境下的mq7虚拟机,链接:https://pan.baidu.com/s/1YJpcQbkO0fo27i_ZHfe6nQ
提取码:yrxc
下载后,解压后,可以用vmware workstaion 打开,直接使用。

队列管理器和 MQI

WebSphere MQ 中的队列由队列管理器 所拥有并进行管理。队列管理器还为应用程序提供了 MQI API,允许它们访问队列以及其中包含的消息。MQI 在 WebSphere MQ 支持的所有平台中保持一致,并对应用程序隐藏了队列管理器的实现细节。

MQI 中有 8 种主要的调用:

MQCONN——连接到队列管理器

MQCONNX——使用连接选项连接到队列管理器

MQDISC——断开与队列管理器的连接

MQOPEN——打开队列以便进行访问

MQCLOSE——关闭访问的队列

MQPUT——将一条消息放入队列

MQGET——从队列中获取一条消息

MQPUT1——打开队列,放入一条消息,然后关闭该队列

MQI 中有 5 种次要的调用:

MQBEGIN——开始一个工作单元

MQCMIT——提交一个工作单元

MQBACK——回滚一个工作单元

MQINQ——查询 WebSphere MQ 对象(队列是一种 WebSphere MQ 对象,队列管理器是另一种对象)的属性

MQSET——设置 WebSphere MQ 对象的属性

消息

WebSphere MQ 中的消息包含两个部分:WebSphere MQ 使用的 Header 和应用程序数据。图 4 显示了一条 WebSphere MQ 消息。

应用程序数据可以包含任何字节序列。它是使用 WebSphere MQ 与其他应用程序进行通信的应用程序所私有的,并且对 WebSphere MQ 没有什么意义。对于应用程序数据的内容没有任何限制,但不同的平台所允许的消息的最大长度有所不同。在大多数系统中,最大长度为 100MB,但有些系统的最大长度为 4MB。

消息中可能包含各种各样的 Header,但所有的消息都包含一个称为消息描述符 (MQMD) 的 Header。其中包含了关于该消息的控制信息,队列管理器和接收应用程序将使用到这些控制信息。稍后将提供关于 MQMD 和其他 Header 的更详细的信息。

本地和远程队列

队列管理器可以位于相同或不同的计算机上,它们可以彼此通信,并在不同队列管理器的队列之间传递消息。队列管理器为消息提供了可靠的传递。例如,当应用程序将消息放入到队列中时,队列管理器将确保消息的存储是安全的、可恢复的,并向接收应用程序传递一次且仅传递一次,即使必须将消息传递到另一个队列管理器所拥有的队列,也是如此。

当应用程序打开队列时,应用程序所连接的队列管理器将确定该队列是队列管理器所拥有的本地 队列,还是由另一个队列管理器所拥有的远程 队列。对于本地队列,直接将消息放入到该队列。如果队列是远程的,那么队列管理器将消息放到一个称为传输 队列的特殊队列。

然后,消息通道代理 (MCA) 从传输队列中获取消息,并将其通过网络发送到接收端的 MCA。接收 MCA 将该消息放到目标 队列。在将消息放到目标队列中之后,便将其从传输队列中删除。消息流在队列管理器之间可以是双向的,如图 5 中所示。

如果接收 MCA 不能将该消息放到目标队列中,那么将根据消息描述符中的选项对其进行处理。可能将其放到死信 队列,也可能将其返回给发送者,甚至将其丢弃。

通过这种在队列管理器之间传递消息的能力,WebSphere MQ 提供了两种重要的优点:

应用程序开发人员不需要了解网络的详细信息。

MCA 可以使用各种网络和通信协议与其他的 MCA 相互通信,并且甚至可以在一段时间之后更改所使用的协议。但是,应用程序开发人员仅需要了解与队列管理器通信所需的 MQI 调用。

仅需要建立更少的通信链路。

许多应用程序使用一个队列管理器,它们可以与使用另一个队列管理器的应用程序通信,但是在一对 MCA 之间只需要一条通信链路。

设计可能性

 

本博主已经安装与配置好的windows7 环境下的mq7虚拟机,链接:https://pan.baidu.com/s/1YJpcQbkO0fo27i_ZHfe6nQ
提取码:yrxc
下载后,解压后,可以用vmware workstaion 打开,直接使用。

现在您已经比较清楚地了解了 WebSphere MQ 的工作方式,即使仅仅是在概略的层次上,下面让我们来看看在使用 WebSphere MQ 设计系统时,应用程序设计的可能性。

并行处理

要完成总体的业务事务,应用程序可能需要执行多项任务。例如,旅行社可能需要预定航班、预订酒店房间和预订出租车。使用 WebSphere MQ,可以将请求消息放到为航班预定系统、酒店预订系统和轿车出租应用程序提供服务的 3 个队列中。每个应用程序都可以与其他两个应用程序并行地执行自己的任务,然后将应答消息放到旅行社应用程序提供的队列中。在收到这 3 个应答之后,旅行社应用程序可以生成综合的旅行路线。这种并行处理的方式可以极大地提高整体性能。

客户端/服务器处理

另一种应用程序设计方案是客户端/服务器处理。在这种情况下,一台服务器仅使用一个队列接收来自多个客户端应用程序的消息。每个请求消息的消息描述符可以指定一个应答队列。在服务器完成对消息的处理之后,它将应答消息发送到消息描述符中指定的应答队列,这样可以使得每个客户端应用程序相对于其他客户端应用程序独立地接收到其应答消息。

消息描述符中还有一个包含消息标识符的字段。应答消息的消息描述符可以包含对应的请求消息的标识符。这样做使得客户端应用程序可以在应答消息和以前发送的请求消息之间进行关联。

要使用客户端/服务器处理来提高应用程序的性能和可靠性,可以使用多个服务器应用程序实例为同一个请求队列服务。

触发

WebSphere MQ 可以在消息放入到队列中以及某些条件满足时,启动一个应用程序。这称为触发。下面是触发的工作方式:

程序将消息放入到支持触发的队列中。

如果触发的条件满足,则发生触发事件。

队列管理器检查应用程序队列所引用的进程对象。该进程对象指定了需要启动的应用程序。

队列管理器创建包含关于进程对象和队列的信息的触发消息。

将该触发消息放到启动队列。

由一个称为触发监视器 的程序负责检索消息,并启动合适的应用程序,将触发消息的信息传递给这个应用程序。

当第一次将消息放到队列中时、当队列中包含的消息达到某个数目时、或者每次将消息放到队列中时,都可能发生触发事件,尽管最后这种情况通常不推荐使用。

数据完整性

有些应用程序使用会话式的程序到程序的通信方式,以使用两段式提交协议来支持分布式工作单元的实现,如图 6 中所示。

这种功能仅在下面的情况下需要使用,业务要求在任何时刻都必须非常精确地维护两个分布式数据库之间的一致性。在实际中,这种类型的需求很少出现。当这种需求的确存在时,单个分布工作单元可能使用许多资源,并且变得非常复杂,尤其是当涉及到许多处理时。

WebSphere MQ 提供了一种更简单的解决方案,使得多个工作单元可以异步执行,如图 7 中所示。

第一个应用程序写入数据库,将包含对其他系统中的第二个数据库进行更新所需数据的消息放到队列中,然后提交对这两种资源的更改。因为该队列是远程的,所以消息仅进入第一个工作单元的传输队列。

第二个工作单元包含发送 MCA 从传输队列中获取该消息,并将其发送给接收 MCA,而后者负责将该消息放到目标队列。

在第三个工作单元中,第二个应用程序从目标队列中获取该消息,并使用该消息中包含的数据对数据库进行更新。

工作单元 1 和 3 的事务完整性,加上工作单元 2 中由 WebSphere MQ 提供的消息的一次且仅一次的可靠传递,从而确保了整个业务事务的完整性。

安全性

WebSphere MQ 中的安全特性包括:

队列管理器可检查某个用户是否经过授权可以提交管理队列管理器的命令。

队列管理器可检查某个用户或应用程序是否经过授权可以在指定的操作中访问 WebSphere MQ 资源,如队列。

在允许 MCA 之间进行消息通信之前,MCA 可以对合作伙伴 MCA 进行身份验证。

可以在 MCA 发送消息之前对其进行加密,然后在接收到该消息之后再对其进行解密。

消息描述符可以包含用户 ID 和关于消息发出者的其他信息。这种信息称为消息上下文,它可以用来对消息进行身份验证,并检查该消息的发送者是否经过授权可以访问接收系统中的 WebSphere MQ 资源。

WebSphere MQ 客户端

WebSphere MQ 客户端可以安装在没有运行队列管理器的系统中。客户端可以将在同一系统中运行的应用程序作为 WebSphere MQ 客户端,以连接到运行于另一个系统中的队列管理器,并向该队列管理器发出 MQI 调用。这种应用程序称为 WebSphere MQ 客户端应用程序,而这种队列管理器称为服务器队列管理器。图 8 显示了这种配置。

WebSphere MQ 客户端应用程序和服务器队列管理器使用 MQI 通道 实现彼此之间的通信。当客户端应用程序发出 MQCONN 或 MQCONNX 调用时启动 MQI 通道,当客户端应用程序发出 MQDISC 调用时结束该通道。

要使 WebSphere MQ 客户端进行有效地处理,需要快速的和可靠的同步通信连接。

本博主已经安装与配置好的windows7 环境下的mq7虚拟机,链接:https://pan.baidu.com/s/1YJpcQbkO0fo27i_ZHfe6nQ
提取码:yrxc
下载后,解压后,可以用vmware workstaion 打开,直接使用。