消息组

消息可以出现在组内以对消息排序。

消息组允许将多条消息标记为彼此相关,并将逻辑顺序应用于组(请参阅逻辑和物理顺序)。 多平台信息分割可以将较大的消息分解成较小的段。 将消息放入主题时不能使用分组或分段消息。

组内的层次结构如下所示:
这是层次结构的最高级别,由 GroupId 标识。 它由一个或多个包含相同 GroupId 的消息组成。 这些消息可以存储在队列的任意位置。
注: 此处使用术语 message 来表示队列上的一项,例如,将由未指定 MQGMO_COMPLETE_MSG 的单个 MQGET 返回。
图 1 显示一组逻辑消息:
图 1。 逻辑消息组
将显示名为 LOGMSG1, LOGMSG2和 LOGMSG3的三条消息以及将它们连接到单个组标识的行。 下图中扩展了此简单图。
通过打开队列并指定 MQOO_BIND_ON_GROUP,可以强制将发送到此队列的组中的所有消息发送到同一队列实例。 有关 BIND_ON_GROUP 选项的更多信息,请参阅 处理消息亲缘关系
逻辑消息
GroupIdMsgSeqNumber 字段标识的组内的逻辑消息。 对于组中的第一条消息,MsgSeqNumber 以 1 开头,如果消息不在组中,则该字段的值为 1。
使用组中的逻辑消息执行下列操作:
  • 确保排序(如果传输消息时没有保证排序)。
  • 允许应用程序对类似消息进行分组(例如,必须全部由同一服务器实例处理的消息)。

组中的每条消息由一个物理消息组成,除非该消息分为多个分段。 每条消息在逻辑上是单独的消息,只有 MQMD 中的 GroupIdMsgSeqNumber 字段需要拥有与组中其他消息的关系。 MQMD 中的其他字段是独立的;其中某些字段可能对于组中的所有消息都相同,但其他字段可能不同。 例如,组中的消息可以有不同的格式名称、CCSID 和编码。

分段用于为输入或获取应用程序或者队列管理器(包括借助其传递消息的中间队列管理器)处理过大的消息。 有关详细信息,请参阅For more information, see消息分段

单个消息拆分为名为分段的较小的消息。 消息段由 GroupIdMsgSeqNumberOffset 字段标识。 对于消息中的第一个分段,Offset 字段以 0 开头。

每个段都由一条可能属于一个组的物理消息组成 ( 图 2 显示了一个组中的消息示例)。 分段在逻辑上是单个消息的一部分,因此只有 MQMD 中的 MsgIdOffsetMsgFlags 字段可以区分同一消息的两个独立分段。 如果段未能到达,那么将相应地返回原因码 MQRC_INCOMPLETE_GROUPMQRC_INCOMPLETE_MSG

图 2 显示了一组逻辑消息,其中一些消息已分段:
图 2。 分段消息
将显示三条名为 LOGMSG1, LOGMSG2和 LOGMSG3的消息,并显示将它们连接到单个组标识的行,如上图中所示。 但是,在这一图形版本中,连接线显示了 LOGMSG1 如何由两个名为 SEG1 和 SEG2 的分段组成。 LOGMSG2 没有分段。 LOGMSG3 通过连接由三个段 (称为 SEG1, SEG2和 SEG3) 组成的线来显示。

[z/OS]不支持分段IBM MQ for z/OS

不能为发布/预订使用分段或组合消息。