GroupId (MQBYTE24)
这是一个字节字符串,用于标识物理消息所属的特定消息组或逻辑消息。 如果消息允许分段,那么也会使用
GroupId 。 在所有这些情况下, GroupId 都具有非空值,并且在 MsgFlags 字段中设置了以下一个或多个标志:- mqmf_msg_in_group
- mqmf_last_msg_in_group
- MQMF_SEGMENT
- mqmf_last_segment
- MQMF_SEGMENTATION_ALLOWED
GroupId 具有特殊空值 MQGI_NONE。在以下情况下,应用程序不需要在 MQPUT 或 MQGET 调用上设置此字段:
- 在 MQPUT 调用上,指定了 MQPMO_LOGICAL_ORDER。
- 在 MQGET 调用上, 未 指定 MQMO_MATCH_GROUP_ID。
GroupId 设置为适当的值。仅当组标识唯一时,才能正确处理消息组和段。 因此, 应用程序不得生成其自己的组标识 ; 相反,应用程序必须执行下列其中一项操作:
- 如果指定了 MQPMO_LOGICAL_ORDER ,那么队列管理器将自动为逻辑消息的组或段中的第一条消息生成唯一组标识,并将该组标识用于逻辑消息的组或段中的其余消息,因此应用程序不需要执行任何特殊操作。 这是建议的过程。
- 如果 未 指定 MQPMO_LOGICAL_ORDER ,那么应用程序必须通过在逻辑消息的组或段中的消息的第一个 MQPUT 或 MQPUT1 调用上将
GroupId设置为 MQGI_NONE ,请求队列管理器生成组标识。 然后,队列管理器在该调用的输出上返回的组标识必须用于逻辑消息的组或段中的其余消息。 如果消息组包含分段消息,那么必须将同一组标识用于该组中的所有分段和消息。如果未指定 MQPMO_LOGICAL_ORDER ,那么可以按任何顺序 (例如,按反向顺序) 放置逻辑消息组和段中的消息,但必须由针对其中任何消息发出的 first MQPUT 或 MQPUT1 调用分配组标识。
在 MQPUT 和 MQPUT1 调用的输入上,队列管理器使用 队列上的物理顺序中描述的值。 在 MQPUT 和 MQPUT1 调用的输出上,如果打开的对象是单个队列而不是分发列表,但如果打开的对象是分发列表,那么队列管理器会将此字段设置为随消息一起发送的值。 在后一种情况下,如果应用程序需要知道生成的组标识,那么应用程序必须提供包含 GroupId 字段的 MQPMR 记录。
在 MQGET 调用的输入上,队列管理器使用 表 2中描述的值。 在 MQGET 调用的输出上,队列管理器将此字段设置为检索到的消息的值。
定义了以下特殊值:
- MQGI_NONE
- 未指定组标识。
对于字段的长度,该值为二进制零。 这是用于不在组中,不在逻辑消息段中且不允许分段的消息的值。
对于 C 编程语言,还定义了常量 MQGI_NONE_ARRAY; 此值与 MQGI_NONE 相同,但是字符数组而不是字符串。
此字段的长度由 MQ_GROUP_ID_LENGTH 指定。 此字段的初始值为 MQGI_NONE。 如果 Version 小于 MQMD_VERSION_2,那么将忽略此字段。