WebSphere MQ Publish/Subscribe 应用程序使用的主题分区方法。相关的主题集合分组到一起成为分开的流。

通过使用流,不同的安全性控制可以应用到主题不同的组,而且可以更好地平衡代理的发布工作负载。

虽然 WebSphere Message Broker 为应用程序提供了其他方式来完成所有这些行为,但是使用 MQRFH 应用程序,流的概念受 兼容性的支持。

WebSphere Message Broker 允许 MQRFH 客户机应用程序在它们的预订和发布内容中指定 MQPSStreamName 命令参数。但是,为了保持 WebSphere MQ Publish/Subscribe 的分区特性,流名称只用于修改主题。

如果与消息相关的流名称不是 SYSTEM.BROKER.DEFAULT.STREAM,则将该消息作为以字符串“$SYS/STREAM/<streamname>/”为前缀的消息中提到的主题进行处理。 例如,对于指定流名称为 StreamX 的 Topic1 的预订,将其作为主题为“$SYS/STREAM/StreamX/Topic1”的预订进行处理。

即使 MQRFH2 发布和预订应用程序本身不能在发送至 WebSphere Message Broker 代理的消息中指定流名称, 但它们还可以将与流相关的主题作为目标。要做到这一点,它们必须将适当的流前缀作为主题的前缀。

例如,要在 WebSphere MQ Publish/Subscribe 网络内的流 STOCK.STREAM 上预订主题“IBM/Latest”,MQRFH2 订户必须指定主题“$SYS/STREAM/STOCK.STREAM/IBM/Latest” 。

WebSphere MQ Publish/Subscribe只允许将与流相关的发布内容发送到与该流同名的队列。但是,WebSphere Message Broker 允许发布客户机将它们的发布内容发送到消息流中的任何输入队列。 选择在发布内容中明确指定流名称参数的 MQRFH 应用程序 可以将该流发送到正由 WebSphere Message Broker 代理服务的任何发布队列。 代理名不必与流名称相同。但是,这个行为可能会影响接收发布的顺序。 考虑这对于应用程序是否是重要。

每个 Publication 节点都有隐式流命名属性,它缺省为 true。当 MQRFH 发布内容不包含显式流名称时,此缺省选项会产生与 WebSphere MQ Publish/Subscribe中相同的行为。如果该属性为false,并且发布内容不包含显式流名称,则采用 SYSTEM.BROKER.DEFAULT.STREAM。

在下表中显示了发布消息的 MQRFH 和 MQRFH2 客户机应用程序都可以使用的选项;该表显示了缺省流和一个名为 StreamX 的示例流的选项。

  MQRFH 发布程序 MQRFH2 发布程序
  缺省流 StreamX 缺省流 StreamX
MQRFH 订户 S1,P1 S2,P2 S1,P3 S2,P4
MQRFH2 订户 S3,P1 S4,P2 S3,P3 S4,P4

订户注释

S1
订户不使用流名称或使用流名称“SYSTEM.BROKER.DEFAULT.STREAM”预订。
S2
订户使用流名称“StreamX”预订。
S3
订户预订有关未添加“$SYS/STREAM/<streamname>/”的主题。
S4
订户预订带有“$SYS/STREAM/StreamX/”前缀的主题。

发布程序注释

P1
发布程序在指定流名称为“SYSTEM.BROKER.DEFAULT.STREAM”的任何队列上发布,或者在不指定流名称的情况下在任何隐式流命名特性设置为 false 的队列上发布。
P2
发布程序在指定流名称为“StreamX”的任何队列上发布,或者在不指定流名称的情况下在隐式流命名属性设置为 true 的“StreamX”队列上发布。
P3
发布程序未将“$SYS/STREAM/<Stream>/”前缀添加至主题就的任何队列上发布。
P4
发布程序在任何队列上发布并将“$SYS/STREAM/StreamX/”前缀添加至主题。
注: 当“$SYS/STREAM/<streamname>/”前缀传递到 MQRFH 订户时,会从 MQRFH2 发布内容的所有主题中除去它。

流和相邻代理

WebSphere MQ Publish/Subscribe 网络中,代理无需支持与其相邻代理相同的流集合。如果代理不支持其某个相邻代理支持的流,则与该流相关的发布内容不可用于该代理的客户机。

WebSphere Message Broker 代理连接网络时,它支持其相邻 WebSphere MQ Publish/Subscribe 代理所有的流。这意味着 WebSphere Message Broker 代理的客户机可以为其任何 WebSphere MQ Publish/Subscribe邻居支持的所有流指定发布内容。

但是,要使这些发布内容变为可用, 必须定义流队列、并且将支持流队列的消息流定义并部署到 WebSphere Message Broker 代理。

下图说明了将 WebSphere Message Broker 代理添加到一个多流 WebSphere MQ Publish/Subscribe 环境中的结果。WebSphere Message Broker 代理 NEWBROKER 已用于连接 WebSphere MQ Publish/Subscribe代理 BROKERA 和 BROKERB。

异构网络


异构网络该图显示了 <ph conref='edvent.dita#edvent/mqsi'></ph> 代理,它放置在两个 <ph conref='edvent.dita#edvent/sdk'></ph> 代理 BROKERA 和 BROKERB 之间。 它还列出了与这两个 <ph conref='edvent.dita#edvent/sdk'></ph> 代理中的每一个相关联的流。

WebSphere MQ Publish/Subscribe 网络中的每个代理一直支持缺省流队列 SYSTEM.BROKER.DEFAULT.STREAM, 必须对异构网络中的每个 WebSphere Message Broker 代理定义它。 必须对每个代理定义和部署消息流,以服务于该队列。

WebSphere Message Broker 代理集成到 WebSphere MQ Publish/Subscribe 网络并链接两个或多个共享公共流的 WebSphere MQ Publish/Subscribe 代理时,必须定义公共流队列并对 WebSphere Message Broker 代理定义和部署为它们提供服务的消息流。

例如,WebSphere Message Broker 代理 NEWBROKER 必须有已为 BULLETIN.STREAM 定义的流队列。而且,它还必须有一个已定义和部署以便为该队列提供发布服务的消息流。

仅当其中一个 WebSphere MQ Publish/Subscribe 邻节点可发送消息到其中一个队列的时,您才需要为图中显示的其他流向 WebSphere Message Broker 代理定义流队列和关联的消息流。如果发生下列事件之一,会发送消息:
  1. 对其中某个流上发布内容的预订由 WebSphere Message Broker 代理的客户机进行注册。
  2. 流的 DeletePublication 命令由位于代理网络内部任何地方的客户机发出。
如果您不能确定是否会发生上述情况,在 WebSphere Message Broker 代理中为 WebSphere MQ Publish/Subscribe邻居支持的每个流创建 流队列和消息流。如果没有这样作,可能发生下列情况:
  • 如果代理中不存在流队列,则从 WebSphere MQ Publish/Subscribe 代理发出的消息将被放入 WebSphere Message Broker 代理的死信队列(DLQ)中。
  • 如果存在流队列,但没有部署为它提供服务的消息流,则消息在 WebSphere Message Broker 代理的流队列上构建。

流和迁移

WebSphere MQ Publish/Subscribe代理迁移到 WebSphere Message Broker 代理(使用 migmqbrk 命令)时, 在迁移时支持的流在 WebSphere Message Broker 代理中被正确复制。随后不能进行更改:即,不能对这个复制集添加或除去流。 直到创建和部署了处理所有这些流的消息流,迁移才完成。

相关任务
预订
相关参考
MQRFH2 头
声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
aq01180_