保护通过代理域传递的消息十分重要。对于应用程序生成的消息和内部用于内部组件通信的消息就是如此。在组件之间内部使用的消息总是使用 WebSphere MQ 协议。应用程序消息可以使用所有受支持的传输协议。
对于跨越 WebSphere MQ的应用程序和内部消息,使用两项技术保护消息不丢失:
如果消息是持久的,则 WebSphere MQ 通过将它复制到磁盘来确保发生故障时不丢失消息。
应用程序可请求在同步化的工作单元(UOW)中处理消息。
有关如何使用这些选项的更多信息,请参阅《WebSphere MQ 系统管理指南》。
WebSphere Message Broker 组件使用 WebSphere MQ 消息在代理进程和子系统,以及配置管理器和用户名称服务器之间进行事件和数据通信。组件确保利用 WebSphere MQ 功能来保护消息不丢失。您无需采取任何其他步骤来配置 WebSphere MQ 或 WebSphere Message Broker 以保护内部消息不丢失。
如果应用程序消息的传递很关键,则必须设计应用程序和它们使用的消息流以确保消息不丢失。所使用的方法取决于应用程序使用的协议。
WebSphere MQ 消息传递产品提供消息持久性,这定义系统中消息的耐久性并保证消息的完整性。非持久消息会在系统或队列管理器发生故障时丢失。持久消息在发生故障时总可以恢复。
当输入节点从输入队列读消息时,缺省操作是使用 WebSphere MQ 消息头(MQMD)中定义的持久性,它是由创建消息的应用程序或输入队列的缺省持久性设置的。消息在整个消息流中保留这一持久性,除非在后续的消息处理节点中更改了它。
当消息流在某一输出节点处终止时,您可以重设每条消息的持久性值。此节点有一个属性,允许您指定将消息放入输出队列时每条消息的消息持久性,可以将它作为必要值指定,也可以作为缺省值指定。如果指定缺省值,消息采用为消息所写入的队列而定义的持久性值。
如果消息通过 Publication 节点传递,则发送到订户的消息持久性是由订户的注册选项确定的。如果订户请求了持久消息传递,并由显式或隐式(继承)的 ACL 授权这样做,则无论消息的现有持久性属性是什么,都将持久地传递该消息。而且,如果用户请求了非持久消息传递,则无论消息的现有持久性属性是什么,都将非持久地传递消息。
如果新消息是由消息流创建的(例如,在 Compute 节点中),则新消息的 MQMD 中的持久性是从入局消息的 MQMD 中的持久性复制而来。
消息流的缺省操作是在代理控制的事务中的同步点下处理入局消息。这表示由于任何原因而无法处理的消息会通过代理回退。因为它是在同步点下接收的,所以失败的消息在输入队列上恢复并可重新处理。如果处理失败,则执行取代此消息流的错误处理过程(由您如何配置消息流或代理定义)。
有关输入节点处理的完整详细信息,请参阅管理输入节点中的错误。
如果发布持久 SCADA 消息,则它可能将级别降低到客户机能接收的最高级别。在某些情况下, 这可能表示消息成为非持久消息。