MsgToken (MQBYTE16)

MsgToken 字段-MQGMO 结构。 此字段由队列管理器用于唯一地标识消息。

这是由队列管理器生成的字节字符串,用于在队列上唯一地标识消息。 消息令牌在第一次将消息放在队列管理器上时生成,并与消息一起保留,直到从队列管理器中永久除去消息为止,除非重新启动队列管理器。

从队列中除去消息时,标识该消息实例的 MsgToken 不再有效,并且永不复用。 如果重新启动队列管理器,那么重新启动前在队列上标识消息的 MsgToken 可能在重新启动后无效。 但是,从不复用 MsgToken 来标识其他消息实例。 MsgToken 由队列管理器生成,对于任何外部应用程序都不可见。

当通过调用 MQGET (其中提供了 V 3 或更高版本的 MQGMO) 返回消息时,队列管理器将在 MQGMO 中返回标识队列上消息的 MsgToken 。 有一个例外: 当从同步点外的队列中除去消息时,队列管理器可能不会返回 MsgToken ,因为在后续 MQGET 调用上标识返回的消息无用处。 应用程序仅应使用 MsgToken 来引用后续 MQGET 调用上的消息。

如果提供了 MsgToken ,并且指定了 MatchOption MQMO_MATCH_MSG_TOKEN 并且未指定 MQGMO_MSG_UNDER_CURSOR 或 MQGMO_BROWSE_MSG_UNDER_CURSOR ,那么只能返回由该 MsgToken 标识的消息。 该选项在所有本地队列上都有效,而不考虑 INDXTYPE ,并且在 z/OS® 上,必须仅在工作负载管理器 (WLM) 队列上使用 INDXTYPE (MSGTOKEN)。

将检查指定的任何其他 MatchOptions ,如果它们不匹配,那么将返回 MQRC_NO_MSG_AVAILABLE。 If MQGMO_BROWSE_NEXT is coded with MQMO_MATCH_MSG_TOKEN, the message identified by the MsgToken is returned only if it is beyond the browse-cursor for the calling handle.

如果指定了 MQGMO_MSG_UNDER_CURSOR 或 MQGMO_BROWSE_MSG_UNDER_CURSOR ,那么将忽略 MQMO_MATCH_MSG_TOKEN。

MQMO_MATCH_MSG_TOKEN 对于以下获取消息选项无效:
  • MQGMO_WAIT
  • MQGMO_SET_SIGNAL

对于指定 MQMO_MATCH_MSG_TOKEN 的 MQGET 调用,必须向该调用提供 V 3 或更高版本的 MQGMO ,否则将返回MQRC_不法 _gmo_version。

如果此时 MsgToken 无效,那么将返回带有 MQRC_NO_MSG_AVAILABLE 的 MQCC_FAILED ,除非存在其他错误。