跳转到主要内容

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

所有提交的信息确保安全。

  • 关闭 [x]

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

所有提交的信息确保安全。

  • 关闭 [x]

WebSphere MQ Solution Designer 认证考试 996 准备: 第 5 部分,其他 MQI 主题

Willy Farrell, 高级软件工程师, IBM Developer Skills Program
Willy Farrell 是 IBM Developer Skills Program 的一名高级软件工程师。作为 developerWorks 小组工作的一名成员,他通过 Web 内容、文章和报告提供有关电子商务和工业最新趋势的相关技术信息和内幕,并为 IBM Scholars Program 成员大学的教师提供咨询。自 1981 年以来,他一直以计算机编程为生,从 1996 年起开始使用 Java,并于 1998 年加入 IBM。

简介:  准备 IBM 认证考试 996:WebSphere MQ Solution Designer。本教程继续前一教程中开始的 Message Queue Interface (MQI) 讨论,从而结束这个系列。这是包括五个教程的系列中的第五个教程。

查看本系列更多内容

发布日期:  2007 年 5 月 29 日
级别: 中级

访问情况 : 5957 次浏览
评论: 

分发列表

概述

分发列表允许您在单个 MQPUT 或 MQPUT1 调用中将消息放置到多个目标。可以使用单个 MQOPEN 来打开多个队列,然后可以使用单个 MQPUT 来将消息放置到那些队列中的每个队列。MQI 结构中用于此过程的一些通用信息可由与分发列表中的各个目标关联的特定信息取代。


打开分发列表

对象记录 (MQOR) 结构用于提供分发列表中每个目标的 ObjectName 和 ObjecQMgrName。对象描述符 (MQOD) 中的字段 RecsPresent 指示正在使用某个分发列表。如果 RecsPresent 大于零,则它包含分发列表中的对象记录数量。

对象描述符中有两个指向对象记录的字段:ObjectRecOffset 和 ObjectRecPtr。这些字段是相互排斥的。

ObjectRecOffset 是第一个 MQOR 相对于对象描述符开头的偏移。此方法有利于不支持指针数据类型或实现指针数据类型的方法在环境之间不可移植(例如,COBOL)的编程语言。

ObjectRecPtr 是指向 MQOR 数组开头的指针。建议对以可移植的方式支持指针数据类型的编程语言(例如 C 语言)使用此方法。

每个 MQOR 中的 ObjectName 是队列名称,而且一定不能是模型队列ObjectQMgrName 是队列所在的队列管理器的名称。请注意,MQOD 是由应用程序构建的;分发列表不是管理员定义的 WebSphere MQ 对象。

在为分发列表中的所有队列构建 MQOR 并为对象描述符设置 RecsPresent 与 ObjectRecOffset 或 ObjectRecPtr 时,将发出 MQOPEN。

每个目标队列都单独地打开,意味着有些可能成功,其他无效的则会失败。如果所有队列都成功打开,则从 MQOPEN 返回的完成代码将是 MQCC_OK。如果所有队列都未能打开,则完成代码将是 MQCC_FAILED。然而,如果有些队列成功打开而有些队列未能打开,则完成代码将是 MQCC_WARNING。对于失败和警告,原因代码都将是 MQRC_MULTIPLE_REASONS。

对象描述符中的三个 *_DEST_COUNT 字段将在 MQOPEN 后被更新:

KnownDestCount成功打开的本地队列数量。
UnknownDestCount成功打开的远程队列数量。
InvalidDestCount未能成功打开的队列数量。

所打开的每个队列的完成代码和原因代码将在一个称为响应记录 (MQRR) 的结构中返回。与前面的对象记录一样,对象描述符的 RecsPresent 字段给出响应记录的数量。而且与前面一样,有两种对 MQRR 数组寻址的方法:定义偏移的 ResponseRecOffset 或指向地址的 ResponseRecPtr。MQRR 记录和偏移或指针必须在调用 MQOPEN 之前设置。


向分发列表添加消息

放置消息选项 (MQPMO) 结构中有几个字段与分发列表相关。

PutmsgRecFields 包括标志,指示放置消息记录 (MQPMR) 结构中存在哪些字段。可以指定一个或多个标志:

MQPMRF_MSG_ID消息标识符
MQPMRF_CORREL_ID相关性标识符
MQPMRF_GROUP_ID组标识符
MQPMRF_FEEDBACK反馈
MQPMRF_ACCOUNTING_TOKEN记帐令牌
MQPMRF_NONE不存在放置消息记录

RecsPresent 字段提供放置消息记录的数量计数。PutMsgRecOffset 和 PutMsgRecPtr 分别提供第一个放置消息记录的偏移或第一个放置消息记录的地址,并且是相互排斥的。如果不存在放置消息记录,则两个字段都应该包含零。

放置消息记录 (MQPMR) 结构最多可以包含五个字段:

MsgId 将用于发送到如下队列的消息的消息标识符,该队列的名称由 MQOPEN 或 MQPUT1 调用上提供的 MQOR 结构数组中的对应元素所指定。对于那些没有包含 MsgId 的 MQPMR,则使用消息描述符 MsgId 字段中的值。如果该值为 MQMI_NONE,则为那些目标中的每一个生成唯一的 MsgId(不会有两个目标具有相同的 MsgId)。如果指定了 MQPMO_NEW_MSG_ID,则为分发列表上的每个目标生成新的 MsgId,而不管它们是否有 MQPMR 记录。
CorrelId 将用于发送到如下队列的消息的相关性标识符,该队列的名称由 MQOPEN 或 MQPUT1 调用上提供的 MQOR 结构数组中的对应元素所指定。如果此字段不存在,或者 MQPMR 比目标少,则使用消息描述符的 CorrelId 字段。如果指定了 MQPMO_NEW_CORREL_ID,则生成单个新的相关性标识符,并用于分发列表中的所有消息。
GroupId 将用于发送到如下队列的消息的组标识符,该队列的名称由 MQOPEN 或 MQPUT1 调用上提供的 MQOR 结构数组中的对应元素所指定。消息描述符的 GroupId 的使用方式与上面对 MsgId 和 CorrelId 描述的条件相同。
Feedback 用于发送到如下队列的消息,该队列的名称由 MQOPEN 或 MQPUT1 调用上提供的 MQOR 结构数组中的对应元素所指定。如果不存在,则使用消息描述符的 Feedback 字段。
AccountingToken 用于发送到如下队列的消息,该队列的名称由 MQOPEN 或 MQPUT1 调用上提供的 MQOR 结构数组中的对应元素所指定。如果不存在,则使用消息描述符的 AccountingToken 字段。

正如在用于分发列表的 MQOPEN 中所描述的,同样的情况也适用于 MQPUT。仅当所有放置都成功时,才会返回 MQCC_OK。仅当所有放置都失败时,才会返回 MQCC_FAILED,并在有些成功而有些失败时返回 MQCC_WARNING。如果返回 MQCC_WARNING 或 MQCC_FAILED,则原因代码将为 MQRC_MULTIPLE_REASONS。

每个队列的响应记录将包含针对该队列的放置操作的完成代码和原因代码。由于队列管理器对每个队列发出一个单独的 MQPUT,因此单独跟踪每个放置操作是可能的。

MQPMO 结构的 KnownDestCount、UnknownDestCount 和 InvalidDestCount 字段分别提供成功发送到本地队列的消息、成功发送到远程队列的消息和未能成功发送的消息的计数。

尝试进行的每个放置操作的完成代码和原因代码将在一个称为响应记录 (MQRR) 的结构中返回。MQPMO 结构的 RecsPresent 字段给出响应记录数量。而且与前面一样,有两种对 MQRR 数组寻址的方法:定义偏移的 ResponseRecOffset 或指向地址的 ResponseRecPtr。MQRR 记录和偏移或指针必须在调用 MQOPEN 之前设置。


关闭分发列表

关闭分发列表时,除 MQCO_NONE 以外的任何关闭选项都将产生原因代码 MQRC_OPTION_NOT_VALID_FOR_TYPE 或 MQRC_OPTIONS_ERROR。

只有 MQCLOSE 的完成代码和原因代码可用于诊断目的。不返回任何单独的完成代码和原因代码,并且不标识任何遇到错误的队列。即使可能发生故障,队列管理器也会继续处理,并尝试关闭分发列表中的其余队列。

9 页,共 14 | 前一页 | 后一页

评论



static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=226944
TutorialTitle=WebSphere MQ Solution Designer 认证考试 996 准备: 第 5 部分,其他 MQI 主题
publish-date=05292007
author1-email=
author1-email-cc=

标签

Help
使用 搜索 文本框在 My developerWorks 中查找包含该标签的所有内容。

使用 滑动条 调节标签的数量。

热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。

我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。

使用搜索文本框在 My developerWorks 中查找包含该标签的所有内容。热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。