流是 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 |
在 WebSphere MQ Publish/Subscribe 网络中,代理无需支持与其相邻代理相同的流集合。如果代理不支持其某个相邻代理支持的流,则与该流相关的发布内容不可用于该代理的客户机。
当 WebSphere Message Broker 代理连接网络时,它支持其相邻 WebSphere MQ Publish/Subscribe 代理所有的流。这意味着 WebSphere Message Broker 代理的客户机可以为其任何 WebSphere MQ Publish/Subscribe邻居支持的所有流指定发布内容。
但是,要使这些发布内容变为可用, 必须定义流队列、并且将支持流队列的消息流定义并部署到 WebSphere Message Broker 代理。
异构网络
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 定义的流队列。而且,它还必须有一个已定义和部署以便为该队列提供发布服务的消息流。