在 WebSphere MQ Publish/Subscribe中,单个线程处理每个流队列上的发布内容。这保证了处理队列中发布内容的顺序。
当考虑 WebSphere Message Broker 代理域中发布内容的吞吐量时,还必须考虑消息发布顺序的重要性。 增加吞吐量的技术不会必然地保证顺序。
如果多个线程处理来自单个队列的消息,则不能保证发布内容将以它们在输入队列中的放置顺序传递到订户。 但是,WebSphere Message Broker 提供的方法允许在保持所需顺序的情况下,同时处理多个发布内容。
可将 MQInput 节点的排序方式属性设置为 By User ID 值。这确保发布内容按照给定用户的传递顺序发送到代理。设置该属性后,对携带 MQMD 中给定 UserIdentifier 字段的消息进行处理时,如果对该消息流提供服务的任何其他线程正在处理携带相同 UserIdentifier 的消息时,则前一消息处理会挂起。
如果所有发布应用程序在同一用户标识下运行,则享受不到运行消息流的更多实例的益处。当发布应用程序连接到代理队列管理器的远程队列管理器时,可能出现这种情况。来自这些远程发布的消息经由一个通道到达代理,该通道可能已设置为用于插入该通道程序的用户标识,该标识用于替代原始客户机的用户标识。请参阅《WebSphere MQ Intercommunications》,获取关于如何设置 PUTAUT 通道属性以更改缺省通道行为的更多信息。
如果决定使用该方法增加吞吐量,则必须考虑这种方法对发布内容传递顺序的影响。尤其必须确保根据发布主题分离发布应用程序,以便维护每个主题的顺序(如果顺序很重要)。如果应用程序发布到相同主题的不同队列(消息流),则无法保证顺序。
如果将发布应用程序更新为把发布内容发送到新队列,而新列队的名称不同于应用程序发布的流名称,则还必须使用 MQPSStreamName 参数更新这些应用程序,使它们在发布内容中显式地包含流名称。