Persistence (MQLONG)
这指示消息是否在队列管理器的系统故障和重新启动后仍然存在。 对于 MQPUT 和 MQPUT1 调用,该值必须是下列其中一项:
- MQPER_PERSISTENT
- 消息在队列管理器的系统故障和重新启动后仍然存在。 一旦放入消息,并且已落实放入该消息的工作单元 (如果将该消息作为工作单元的一部分放入) ,那么将在辅助存储器上保留该消息。 它将保留在此位置,直到从队列中除去该消息,并且已落实该消息所在的工作单元 (如果将该消息作为工作单元的一部分进行检索)。
将持久消息发送至远程队列时,存储转发机制会将消息保存在路由至目标的每个队列管理器上,直到已知消息已到达下一个队列管理器为止。
无法将持久消息放在以下位置:- 临时动态队列数
- 映射到 CFLEVEL ($TAG1) 或更低级别的 CFSTRUCT 对象的共享队列,或者将 CFSTRUCT 对象定义为 RECOVER (NO) 的共享队列。
- MQPER_NOT_PERSISTENT
- 该消息通常不会在系统故障或队列管理器重新启动后继续存在。 即使在队列管理器重新启动时在辅助存储器上找到消息的完整副本,这也适用。
对于 NPMCLASS (HIGH) 队列,非持久消息在正常队列管理器关闭并重新启动后仍然存在。
对于共享队列,非持久消息会在队列共享组中的队列管理器重新启动后继续存在,但不会在用于在共享队列上存储消息的耦合设施发生故障后继续存在。
- MQPER_PERSISTENCE_AS_Q_DEF
- 如果队列是集群队列,那么将从 destination 队列管理器中定义的 DefPersistence 属性获取消息的持久性,该队列管理器拥有放置消息的队列的特定实例。 通常,集群队列的所有实例都具有相同的 DefPersistence 属性值,尽管这不是强制的。
将消息放入目标队列时,会将
DefPersistence的值复制到Persistence字段中。 如果随后更改DefPersistence,那么已放入队列中的消息不受影响。 - 如果队列不是集群队列,那么将从 本地 队列管理器上定义的 DefPersistence 属性获取消息的持久性,即使目标队列管理器是远程队列管理器也是如此。如果在队列名解析路径中有多个定义,那么缺省持久性取自路径中 第一个 定义中此属性的值。 这可以是:
- 别名队列
- 本地队列
- 远程队列的本地定义
- 队列管理器别名
- 传输队列 (例如,
DefXmitQName队列)
放入消息时,会将
DefPersistence的值复制到Persistence字段中。 如果随后更改了DefPersistence,那么已放入的消息不受影响。
- 如果队列是集群队列,那么将从 destination 队列管理器中定义的 DefPersistence 属性获取消息的持久性,该队列管理器拥有放置消息的队列的特定实例。 通常,集群队列的所有实例都具有相同的 DefPersistence 属性值,尽管这不是强制的。
持久消息和非持久消息都可以存在于同一队列中。
在回复消息时,应用程序必须将请求消息的持久性用于回复消息。
对于 MQGET 调用,返回的值为 MQPER_PERSISTENT 或 MQPER_NOT_PERSISTENT。
这是 MQGET 调用的输出字段,也是 MQPUT 和 MQPUT1 调用的输入字段。 此字段的初始值为 MQPER_PERSISTENCE_AS_Q_DEF。