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