这是WebSphere MQ 和 Atomikos - Messages Lost on process terminate中继续讨论的一个问题
JMS 字段中提到的 JMSDeliveryMode和具有相应 MQMD 字段的属性是否确定 MQ 消息是否持久?
这是WebSphere MQ 和 Atomikos - Messages Lost on process terminate中继续讨论的一个问题
JMS 字段中提到的 JMSDeliveryMode和具有相应 MQMD 字段的属性是否确定 MQ 消息是否持久?
是的,只要使用 IBM 的 JMS 类将消息放在那里。这些类会将JMSDeliveryMode
值转换为 WebSphere MQ 持久性值之一。
AC 程序可能会尝试设置或更改消息属性,以便它们与消息头不同,我不确定 WMQ API 是否会在这种情况下强制执行一致性。
但是,重申第一部分,答案是肯定的。链接的页面描述了 JMS 属性如何映射到本机 WMQ 标头,JMSDeliveryMode
并且确实映射到MQMD.Persistence
.
我注意到您指向 V6.0 信息中心的链接。希望您不再使用 WMQ V6.0,因为它会在几天后终止服务。相同信息的当前信息中心主题在这里,您会发现它已重新组织并阐明了一些要点。我强烈建议至少迁移到 V7.1 客户端和 QMgr,最好是 V7.5——当然还有相应的 Infocenter。
更新:
回应评论,优先顺序如下:
PERSISTENCE=APP
(默认),则应用程序的设置优先。请注意,如果第一次放置消息的队列恰好是传输队列,则持久性在该点确定并随消息一起到达任何位置,即使远程目标队列设置为DEFPSIST(NO)
.
如果您仔细查看第一个项目符号中链接的页面,您会注意到可能的持久性值 HIGH。该值的描述似乎已从书中删除(我会报告),但它在此页面上. 这是 JMS 的“尽力而为”的交付模式,介于 WMQ 的持久模式和非持久模式之间。由于没有本机等效项,WMQ 通过在标记为恢复的队列上使用非持久消息来实现这一点。当 QMgr 启动时,将保存队列中的所有非持久消息,假设关闭和启动正常且队列文件未损坏。即使在具有线性日志记录的 QMgr 上,也不会记录这些消息以进行媒体恢复,因此它们只有一个副本。因此,大多数情况下,这些消息在重新启动后仍然存在,但如果 QMgr 可以通过删除它们来解决任何情况,它就会解决。
请注意页面上的警告说,必须将消息通过的所有队列设置为NPMCLASS(HIGH)
才能正常工作。我不确定如果消息在NPMSPEED(NORMAL)
通过网络的途中进入队列时会发生什么,但您可能应该将它们视为非持久性的。