优化消息流吞吐量

您设计的每个消息流必须完整地处理从某个源接收的消息。然而,这可能导致包含大量节点的极其复杂的消息流,并引起性能开销和潜在瓶颈。增加处理消息的消息流数量将为并行处理提供机会,因而会增大吞吐量。

您也可以考虑消息流所执行操作的落实方式,以及处理消息的顺序。

考虑以下用于优化消息流吞吐量的选项:

单个消息流中多个处理消息的线程
当您部署消息流时,代理会自动为每个输入节点启动其包含的消息流实例。这是缺省行为。但是,如果您有一个处理大量消息的消息流,则输入源(如,WebSphere MQ 队列)可能会成为瓶颈。

您可以更新 BAR 文件中已部署的消息流的附加实例属性:代理在单独的线程上启动消息流的附加副本,以提供并行处理。如果您不关心消息的处理顺序,这是处理这种情况的最有效的方法。

如果消息流从 WebSphere MQ 队列接收消息,您可以通过设置 MQInput 队列的排序方式属性在某种程度上影响处理消息的顺序。

  • 如果将排序方式设置为按用户标识,则节点可确保以保证的顺序处理来自特定用户(由 MQMD 中的 UserIdentifier 字段标识)的消息。如果一个消息流实例当前正在处理来自某个用户的前一条消息, 则该消息流的另一个实例不会处理来自该用户的第二条消息。
  • 如果将排序方式设置为按队列顺序,则节点将一次处理一条消息,以保持队列中读消息的顺序。因此,该节点会像您已将消息流的附加节点属性设置为零那样操作。

对于通过所有受支持协议与代理通信的发布/预订应用程序,代理发布任何给定主题的消息的顺序,与从发布程序接收这些消息的顺序相同(如果适用,将基于消息优先级重新排序)。这通常表示每个订户按特定发布程序发布消息的顺序, 接收从该发布程序经特定代理发布的关于特定主题的消息。

然而,消息可能偶尔不会按顺序传递。例如,如果网络中有一条链路发生故障,而且后续消息由另一条链路路由,就会发生这种情况。

如果需要确保消息接收的顺序,可以在用于每条发布消息的 Publish 命令中使用 SeqNum(序号)或 PubTime(发布时间戳记)参数,以计算发布的顺序。

有关推荐给所有 MQI 和 AMI 用户的技术的更多信息,请参阅 WebSphere MQ Application Programming Guide,和WebSphere MQ 应用程序消息传递接口》(在 WebSphere MQ SupportPacs Web 页面上作为 SupportPac MA0F 提供);前者针对写入 MQI 的程序,后者针对写入 AMI 的程序。

WebSphere MQ Everyplace 和 SCADA 应用程序使用的消息排序方法不同,WebSphere MQ 移动传输方式WebSphere MQ 遥感传输方式中对此分别进行了描述。 代理不会对通过 WebSphere MQ Web Services 传输方式WebSphere MQ 实时传输方式WebSphere MQ 多点广播传输方式接收的消息进行消息排序。

代理中的多个消息流副本
您还可以将相同消息流的几个副本部署到同一个代理中的不同执行组。虽然这样做没有明显获益,但其效果与在单个消息流中增加处理线程的数量相似。

该选项还除去了确定处理消息的顺序的功能。原因是,如果代理中存在多个活动的消息流副本,每个副本都可从同一队列同时处理消息。处理消息所用的时间可能不同,因此访问相同队列的多个消息流会以随机顺序读取来自输入源的消息。消息流所生成消息的顺序可能与原始消息的顺序不一致。

请确保从这些消息流接收消息的应用程序可接受无序消息。

多个代理中的消息流副本
您可以将相同消息流的几个副本部署到不同的代理。该解决方案需要对配置进行一些更改,因为您必须确保将消息提供给消息流的应用程序能将其消息放到正 确的输入队列或端口。在您通过设置消息流的可配置属性来部署消息流时,可经常进行这些更改。
消息流的作用域
在某些情况下您可能会发现,可以将单个消息流分割为几条不同的流以减少每个消息流执行工作的作用域。如果您这样做,需要清楚在同一工作单元中执行各个消息流是不可能的,如果您的消息流有事务性方面的工作(例如,多个数据库的更新),此选项不能提供合适的解决方案。

以下两个示例显示在何时您可能要分割消息流:

  1. 在使用 RouteToLabel 的消息流中,输入队列成为瓶颈。您可以在第二个执行组中使用消息流的另一个副本,但如果您想要让所有消息按它们在队列上出现的顺序进行处理,则这样做是不合适的。您可以考虑通过为每个分支提供输入队列和输入节点分割以 Label 节点开始的消息的每个分支。这可能会是合适的,因为当 RouteToLabel 节点将消息路由到相关的 Label 节点时,此消息相对于其他所有消息有一定的独立性。

    当完成唯一的处理时,您可能还需要提供另一个输入队列和输入节点以完成 Label 分支连接的任何公共处理。

  2. 如果您有消息流处理十分大型的消息,且处理这些消息需时很长,您也许可以执行以下操作:
    1. 创建使用不同输入队列的消息流的其他副本(您可以在消息流本身进行此设置,或可以在部署消息流时更新此属性)。
    2. 设置 WebSphere MQ 队列别名将来自某些应用程序的消息重定向至备用队列和消息流。

    您还可创建新的消息流复制原始消息流的函数(但仅处理原始消息流直接传递到该消息流的大型消息),该原始消息流已由您进行修改以检查输入消息大小和重定向大型消息。

落实频率
如果消息流在 WebSphere MQ 队列上接收输入消息,则可在将该消息流添加至 BAR 文件后,通过修改其缺省属性提高其吞吐量以用于某些消息流方案。(如果输入消息为其他输入节点所接收,则这些选项不可用;并对每条消息执行这些消息流中的落实。)

以下属性控制消息流落实事务的频率:

  • 落实计数。表示发出 MQCMIT 前,输入队列中所处理消息的数量。
  • 落实时间间隔。表示调用 MQCMIT 前所经过的时间间隔。
相关概念
消息流概述
部署概述
相关任务
优化消息流响应时间
创建消息流
定义消息流内容
编辑可配置的属性
相关参考
内置节点
配置消息流属性
声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
ac00350_