1、分发列表先决条件本教程是为具有应用程序和解决方案设计和实现方面的中级经验的开发人员和架构师编写的。它假设您具有以下几方面中级知识和技能:事务管理和数据库产品 系统管理 基本编程概念 数据通信和网络 信息技术安全概念系统要求本教程中的示例使用 WebSphere MQ V6.0 for Windows 和 Rational Application Developer V6.0 for Windows 开发。本教程中使用的产品的系统要求可通过以下链接找到:WebSphere MQ Rational Application Developer 本帖最后由 阳春三月 于 2008-7-7 18:09
2、编辑 搜索更多相关主题的帖子: Solution Designer MQI WebSphere 考试 Solution Designer MQI WebSphere 考试 查看详细资料 TOP 阳春三月 版主帖子141 积分1311 金钱1000 W币 注册时间2008-7-7 个人空间 发短消息 加为好友 当前离线 2# 大 中 小 发表于 2008-7-7 18:05 只看该作者 WebSphere入门开窍班第6期:剪不断理还乱的Portal问题汇总 | 谁是未来存储架构师?成就下一代信息架构 | WebSphere中国杂志免费领取MQINQ 和 MQSET概述MQINQ 谓词允许您查询任
3、何队列、进程、队列管理器或名称列表的所有属性从程序中,您可以使用此调用来发现诸如队列的最大消息长度、进程所指向的应用程序、队列管理器的死信队列或名称列表的属性列表等内容。MQSET 谓词允许您更改属性,但是只能更改队列的属性。您能够设置的属性主要与触发相关联。MQINQ 和 MQSET 调用都使用选择器数组来标识您希望查询或设置的那些属性。您能够处理的每个属性有一个对应的选择器。选择器名称具有前缀,由属性的性质确定:attach805/attach在使用 MQINQ 或 MQSET 调用前,必须将应用程序连接到队列管理器,并且必须使用 MQOPEN 调用来打开对象以便设置或查询属性。MQINQ
4、MQINQ 调用可用于了解 WebSphere MQ 对象的属性设置。这包括队列、队列管理器、进程和名称列表。该调用返回一个整数数组和一组字符串,其中包含所请求的属性。在发出 MQINQ 调用前,需要首先打开对象以便查询。MQINQ 调用的语法如下:复制内容到剪贴板代码:MQINQ (Hconn, Hobj, SelectorCount, Selectors, IntAttrCount, IntAttrs, CharAttrLength, CharAttrs, CompCode, Reason) MQINQ(以及 MQSET)所需的参数比任何其他 MQI 调用的参数都多。其他调用上的常用参数包
5、括作为前两个参数的连接句柄 (Hconn) 和对象句柄 (Hobj)。与所有 MQI 调用一样,最后两个参数是完成代码 (CompCode) 和原因代码 (Reason)。通过将其他参数划分为组,理解它们是相当容易的:SelectorCount 和 SelectorsIntAttrCount 和 IntAttrsCharAttrLength 和 CharAttrsSelectorCount MQINQ 中包括的属性总数。它不过就是您所查询的属性数量计数。Selectors 是那些属性的数组(或列表)。每个属性都分配了一个符号名称,可以使用它来代替分配给该属性的数值。WebSphere MQ A
6、pplication Programming Reference(请参见参考资料)中的 MQINQ 讨论中按对象列出了所有属性。 IntAttrCount 表示为整数的选择器总数。这其中包括诸如 MQIA_CURRENT_Q_DEPTH、MQIA_Q_TYPE 或 MQIA_MAX_Q_DEPTH 等选择器。IntAttrs 是一个数组(或列表),将用于返回所请求的整数属性。 CharAttrLength 已请求的所有字符属性的总长度。CharAttrs 是一个缓冲区区域的名称,所有请求的字符属性将作为一个长字符串在该缓冲区中返回,直到该字符串达到 CharAttrLength 所指定的长度。
7、 设置字符属性要比设置整数属性需要更多的工作。如果需要字符属性 MQCA_Q_NAME 和 MQCA_Q_DESC,则将这两个属性的长度(分别为 48 和 64 个字符)加起来设置 CharAttrLength 中的值 (112)。不必知道这其中每个字段的长度,因为长度也具有符号名称。在刚才所举的例子中,CharAttrLength 的值可通过将 MQ_Q_NAME_LENGTH 和 MQ_Q_DESC_LENGTH 相加来获得。当然,您必须确保拥有能够容纳预期会返回的最长字符串的缓冲区。响应将确切按照请求的顺序返回。假设 Selectors 为:MQIA_CURRENT_DEPTHMQCA_
8、Q_NAMEMQIA_MAX_Q_DEPTHMQCA_Q_DESC为字符属性设置了一个至少 112 个字符的缓冲区,为整数属性设置了一个数组。程序在 IntAttrCount 中提供值 2,在 CharAttrLength 中提供值 112。在从调用返回时,整数数组中第一个位置中的值将是当前深度 (MQIA_CURRENT_Q_DEPTH),随后跟着是最大深度 (MQIA_MAX_Q_DEPTH)。字符串缓冲区将在前 48 个字符中包含队列名称 (MQCA_Q_NAME),随后紧跟着是 64 个字符的队列描述 (MQCA_Q_DESC)。程序将需要把该字符串划分为各个部分。MQINQ 伪代码清
9、单 1 显示了 MQINQ 调用的伪代码。为简化代码和集中于 MQINQ,常规事务调用已省去了。清单 1. MQINQ 示例DEFINE CONN_HANDLE AS MQHCONN DEFINE OBJ_HANDLE AS MQHOBJ DEFINE COMP_CODE AS MQLONG DEFINE REASON_CODE AS MQLONG DEFINE SELECTORS AS ARRAY 5 MQLONG DEFINE SELECTOR_COUNT AS MQLONG DEFINE INT_COUNT AS MQLONG DEFINE INTS AS ARRAY 3 MQLONG
10、DEFINE CHAR_COUNT AS MQLONG DEFINE CHARS AS CHAR2000 CALL MQCONN(.) CALL MQOPEN(.) SELECTOR_COUNT = 4 SELECTORS(1) = MQCA_BACKOUT_REQ_Q_NAME SELECTORS(2) = MQIA_BACKOUT_THRESHOLD SELECTORS(3) = MQCA_CREATION_DATE SELECTORS(4) = MQIA_INHIBIT_GET INT_COUNT = 2 CHAR_COUNT = MQ_Q_NAME_LENGTH + MQ_CREATI
11、ON_DATE_LENGTH MQINQ(CONN_HANDLE, OBJ_HANDLE, SELECTOR_COUNT, SELECTORS, INT_COUNT, INTS, CHAR_COUNT, CHARS, COMP_CODE, REASON_CODE) SELECTORS 被定义为一个具有 5 个条目的数组,SELECTOR_COUNT 是一个 4 字节的字段,其中将包含 SELECTORS 的数量。INT_COUNT 将包含属于整数的 SELECTORS 数量,INTS 是将返回整数值的数组。名为 CHAR_COUNT 的字段将包含要返回的所有字符属性的总长度,CHARS 是缓冲
12、区,其中将返回由所有那些字符属性构成的字符串。 假设 MQOPEN 包括 MQOO_INQUIRE 选项。此 MQINQ 将请求四个选择器。四个所需属性放在 SELECTOR 数组中。INT_COUNT 设置为 2,字符属性长度加起来确定 CHAR_COUNT。最后是执行该 MQINQ 调用。如果调用成功,应用程序就可以从 INTS 和 CHARS 检索所请求的信息。MQSETMQSET 调用的语法如下:MQSET (Hconn, Hobj, SelectorCount, Selectors, IntAttrCount, IntAttrs, CharAttrLength, CharAttrs,
13、 CompCode, Reason) 可以看到,参数在类型和顺序方面与 MQINQ 完全相同。不同之处在于某些数据的流向。MQINQ 上的输出字段(IntAttrs 和 CharAttrs)成了 MQSET 上的输入字段。一个更重要的区别在于,除了队列以外,不允许对任何其他对象执行 MQSET。而且,只能更改属性的一个很小子集。指示是否允许 PUT 的属性 (MQIA_INHIBIT_PUT) 对所有队列类型都是可设置的。只能对本地和别名队列设置 MQIA_GET_INHIBITED 属性。还允许对本地队列设置与触发关联的以下属性:MQCA_TRIGGER_DATAMQIA_TRIGGER_C
14、ONTROLMQIA_TRIGGER_DEPTHMQIA_TRIGGER_MSG_PRIORITYMQIA_TRIGGER_TYPE还允许对那些支持分发列表的平台设置 MQIA_DIST_LISTS。队列必须使用 MQOO_SET 选项来打开。如果未能设置任何属性(也许是由于所请求的属性之一不允许 MQSET),则不会设置任何一个请求的属性,并且调用会失败。如果调用成功,则更改会立即生效。MQSET 伪代码清单 2 显示了 MQSET 调用的伪代码。为简化代码和集中于 MQSET,常规事务调用已省去了。清单 2. MQSET 示例DEFINE CONN_HANDLE AS MQHCONN DE
15、FINE OBJ_HANDLE AS MQHOBJ DEFINE COMP_CODE AS MQLONG DEFINE REASON_CODE AS MQLONG DEFINE SELECTORS AS ARRAY 5 MQLONG DEFINE SELECTOR_COUNT AS MQLONG DEFINE INT_COUNT AS MQLONG DEFINE INTS AS ARRAY 3 MQLONG DEFINE CHAR_COUNT AS MQLONG DEFINE CHARS AS CHAR2000 CALL MQCONN(.) CALL MQOPEN(.) SELECTOR_CO
16、UNT = 2 SELECTORS(1) = MQIA_TRIGGER_TYPE SELECTORS(2) = MQIA_TRIGGER_DEPTH INTS(1) = MQTT_DEPTH INTS(2) = 10 INT_COUNT = 2 CHAR_COUNT = 0 MQINQ(CONN_HANDLE, OBJ_HANDLE, SELECTOR_COUNT, SELECTORS, INT_COUNT, INTS, CHAR_COUNT, CHARS, COMP_CODE, REASON_CODE) 定义各个字段的代码与 MQINQ 完全相同。该调用旨在更改队列的触发器类型,以允许使用关
17、于深度 (MQIA_TRIGGER_TYPE) 的触发器。既然关于深度的触发暗示的不是 1(即 MQTT_FIRST),因此必须在队列的 MQIA_TRIGGER_DEPTH 属性中指定导致触发所需的消息数量(在此例中为 10)。在所设置的选择器中,两个都是整数,因此将 INT_COUNT 设置为 2,将 CHAR_COUNT 设置为 0。最后是使用已设置的参数来发出 MQSET 调用。13 编辑 在这里,您可以IBM 软件产品下载、Demo下载、试用版下载、红皮书下载、白皮书下载 帖子141 积分1311 金钱1000 W币 注册时间2008-7-7 个人空间 发短消息 加为好友 当前离线
18、3# 大 中 小 发表于 2008-7-7 18:06 只看该作者 处理队列属性示例代码在本部分,您将查看并运行一个查询和设置队列属性的示例代码。下载示例代码将包含示例代码和配置文件的 .zip 文件 (samples.zip) samples.zip (12.51 KB) samples.zip (12.51 KB)下载次数: 22008-8-27 16:04下载到您的系统上。将该文件的内容提取到系统上的某个文件夹中。提取之后,您将拥有三个文件:MQAdditional.zip、setup04.txt 和 setup05.txt。将两个设置文件复制到您的用户目录,即打开命令提示符时的缺省目录
19、。通常,该目录为 Documents and SettingsAdministrator or Documents and Settings。导入示例代码从“开始”菜单中启动 Application Developer。在提示选择工作区时接受缺省工作区,然后单击 OK。从主菜单中,单击 Window Open Perspective Java。从主菜单中选择 File Import.。选择 Project Interchange,然后单击 Next。单击 From zip file: 字段旁边的 Browse.,导航到您解压缩下载的示例代码的文件夹,选择 MQAdditional.zip。单击
20、 Open。选择 Select All,然后单击 Finish。在 Package Explorer 视图中展开 MQAdditional,再展开 com.ibm.cert996 以显示代码示例类。双击 MQInq.java。双击 MQSet.java。检查示例代码实际上您将运行四个程序来检查 MQINQ 和 MQSET 功能。这里将讨论其中两个,即 MQInq.java 和 MQSet.java。另外两个程序,即 PutToRequest.java 和 MQUnset.java,是辅助本练习的实用程序,因此这里就不再讨论它们了。然而,建议您大致看一下它们,并了解它们是如何工作的。MQInq.
21、java在对 MQInq.java 的讨论中,我们将分成很小的部分来逐一查看该代码,并解释每个部分所做的工作。让我们首先看一下类声明,以及已声明的一些常量和 main() 方法,如清单 3 所示。清单 3. MQInq.java 类声明public class MQInq private static final String qManager = QMC1; private static final String qName = CERT.REQUEST public static void main(String args) new MQInq().run(); 此代码定义了两个常量字符串
22、来指定队列管理器和队列。main() 方法不过就是创建该类的实例,并调用其 run() 方法。run() 方法是该类中唯一的其他方法,我们将在此检查过程的其余部分研究它。清单 4 显示了 run() 方法的前几行。Listing 4. run() 方法的开头public void run() System.out.println(Start MQInq); try MQQueueManager qMgr = new MQQueueManager(qManager); int openOptions = MQC.MQOO_INQUIRE + MQC.MQOO_FAIL_IF_QUIESCING;
23、 MQQueue queue = qMgr.accessQueue(qName, openOptions); System.out.println(Inquiring on attributes of queue: + queue.name);此代码首先向控制台打印一条指示 MQInq 已启动的消息,建立到队列管理器的连接,并打开队列以便查询。然后打印一条包含队列名称的消息。清单 5 显示了如何“查询”和显示队列的队列类型。清单 5. 查询队列类型int queueTypeValue = queue.getQueueType(); String queueTypeName = Unknown
24、switch (queueTypeValue) case MQC.MQQT_ALIAS: queueTypeName = Alias break; case MQC.MQQT_LOCAL:Local case MQC.MQQT_MODEL:Model case MQC.MQQT_REMOTE:Remote default: System.out.println(Queue type: + queueTypeName);如果您认为清单 5 看起来与 MQINQ 不像,您是对的。在 WebSphere MQ base Java 类中,有多个队列特性 (attribute) 被定义为队列对象的属性
25、(property)。这不过就是调用一个 get() 方法来检索那些特性的问题。队列类型是属于队列对象属性的那些特性之一。还有其他几个队列属性,如清单 6 所示。清单 6. 其他队列属性 int maximumDepth = queue.getMaximumDepth();System.out.println(Maximum depth: + maximumDepth);int currentDepth = queue.getCurrentDepth();Current depth: + currentDepth);int maximumMsgLength = queue.getMaximum
26、MessageLength();Maximum message length: + maximumMsgLength);int inhibitGetValue = queue.getInhibitGet();String inhibitGetName = switch (inhibitGetValue) case MQC.MQQA_GET_INHIBITED: inhibitGetName = Inhibitedcase MQC.MQQA_GET_ALLOWED:Alloweddefault:Get: + inhibitGetName);int inhibitPutValue = queue.
27、getInhibitGet();String inhibitPutName = switch (inhibitPutValue) case MQC.MQQA_PUT_INHIBITED: inhibitPutName = case MQC.MQQA_PUT_ALLOWED:ut: + inhibitPutName); 本帖最后由 艾依然 于 2008-8-27 16:04 编辑 帖子141 积分1311 金钱1000 W币 注册时间2008-7-7 个人空间 发短消息 加为好友 当前离线 4# 大 中 小 发表于 2008-7-7 18:24 只看该作者 可以看到,对于这些属性,检索它们的值要比设置整数和字符计数及数组容易得多。然而,并非所有队列特性都可用作属性。对于那些不可用作属性的队列特性,WebSphere MQ base Java 类提供了看起来应该像熟悉
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1