IBM MQ 中的集群 PUB/SUB 是否涉及使用集群通道来传递消息?
Does cluster PUB/SUB in IBM MQ involve the use of cluster channel for delivering the message?
理论是,当在集群主题中发布时,消息的副本会传递给通过订阅对象订阅该主题的所有队列管理器。
这个问题是一个纯理论问题:
消息副本是否通过集群通道传送到目标队列管理器?集群通道是否用于此目的?
如果答案是否定的,那么将出版物的副本从来源地传送到目的地的机制是什么?
简短的回答是,如果发布者不在进行订阅的队列管理器本地,则 IBM MQ 使用集群通道来传递发布到集群主题的消息。
较长的答案是,对于 IBM MQ v7.0/7.1/7.5,如果发布发生在所有注册该主题的代理订阅的队列管理器上,则交付始终直接来自队列管理器。
问题是集群中的每个队列管理器都需要了解集群中的每个其他队列管理器以及集群中任何集群主题的每个订阅者。在大型集群中,即使只有两个队列管理器参与集群 pub/sub,集群中的每个队列管理器都需要了解所有其他队列管理器和订阅。
当您第一次在 PR(部分存储库)队列管理器上集群一个主题时,它会通知 FR(完整存储库)关于新主题,然后他们会将这个与集群中的每个 PR 队列管理器一起发送有关如何连接到集群中每个其他 PR 的信息。如果集群中有 1000 个 PR 队列管理器,这意味着每个 PR 现在都知道 999 个其他 PR。
此外,当您在任何 PR 上添加对集群主题的订阅时,该 PR 将连接到所有其他 PR 并告诉它设置代理订阅,这意味着 PR 将启动 999 CLUSSDR 频道来传播这个代理订阅。
在信息的初始传播之后,如果只有两个 PR 使用 pub/sub,例如发布者应用程序发布到 PR1 上的主题,订阅者应用程序订阅 PR2 上的主题,而不是集群更新关于topic 只会在PR1和PR2之间进行通信。
这与集群 QUEUE 行为不同。当您第一次将 QUEUE 集群到 PR 队列管理器时,它将通知 FR(完整存储库)有关 QUEUE 的信息。此时 FR 不需要通知其他 PR(他们无论如何都会通知其他 FR)。如果你想把那个集群队列放在另一个 PR 上,如果 PR 不知道队列,它将去 FR 查看队列是否存在,如果存在,FR 将有关它的信息发送给 PR。然后 FR 知道 PR 对该对象感兴趣,并且对集群 QUEUE 的任何进一步更新仅发送给感兴趣的 PR。如果应用程序继续放入集群队列以保持这种兴趣,PR 也会定期让 FR 知道他们仍然感兴趣,但是如果应用程序最终停止使用该队列,PR 将不会表达兴趣并且 FR 将停止向该队列发送更新公关
在 MQ v8 中,IBM 为集群添加了路由 pub/sub,原来的现在称为直接 pub/sub。
您现在可以使用新属性 CLROUTE
更改集群主题的行为,这可以设置为 DIRECT
,这是默认设置,可以像 MQ v8 之前那样工作,或者您可以通过将其设置为 TOPICHOST
.
来获得新行为
我所说的第一部分保持不变,因为集群中的每个 PR 都会从 FR 获得有关新集群 TOPIC 的更新,但他们只会了解您在其上定义 TOPIC 的那个 PR不是集群中的所有其他队列管理器。
当订阅一个TOPIC时,订阅所在的PR只会连接到CLROUTE(TOPICHOST)
定义的集群TOPIC的PR,不会连接到所有其他PR来创建代理订阅.如果消息发布到任何 PR 上的主题,该 PR 将仅将其发送到 TOPICHOST,然后 TOPICHOST 将其发送到通知它代理订阅的其他 PR。 (请注意,您可以而且应该拥有多个 TOPICHOST 以实现冗余,但我没有深入了解这些细节)。
来自 IBM MQ L2 支持的 Angel Rivera 就此主题进行了非常好的网络广播,您可以在此处访问音频的 PDF 和 MP3:MQ Pub/Sub: Topic host routing clusters。
理论是,当在集群主题中发布时,消息的副本会传递给通过订阅对象订阅该主题的所有队列管理器。
这个问题是一个纯理论问题: 消息副本是否通过集群通道传送到目标队列管理器?集群通道是否用于此目的?
如果答案是否定的,那么将出版物的副本从来源地传送到目的地的机制是什么?
简短的回答是,如果发布者不在进行订阅的队列管理器本地,则 IBM MQ 使用集群通道来传递发布到集群主题的消息。
较长的答案是,对于 IBM MQ v7.0/7.1/7.5,如果发布发生在所有注册该主题的代理订阅的队列管理器上,则交付始终直接来自队列管理器。
问题是集群中的每个队列管理器都需要了解集群中的每个其他队列管理器以及集群中任何集群主题的每个订阅者。在大型集群中,即使只有两个队列管理器参与集群 pub/sub,集群中的每个队列管理器都需要了解所有其他队列管理器和订阅。
当您第一次在 PR(部分存储库)队列管理器上集群一个主题时,它会通知 FR(完整存储库)关于新主题,然后他们会将这个与集群中的每个 PR 队列管理器一起发送有关如何连接到集群中每个其他 PR 的信息。如果集群中有 1000 个 PR 队列管理器,这意味着每个 PR 现在都知道 999 个其他 PR。
此外,当您在任何 PR 上添加对集群主题的订阅时,该 PR 将连接到所有其他 PR 并告诉它设置代理订阅,这意味着 PR 将启动 999 CLUSSDR 频道来传播这个代理订阅。
在信息的初始传播之后,如果只有两个 PR 使用 pub/sub,例如发布者应用程序发布到 PR1 上的主题,订阅者应用程序订阅 PR2 上的主题,而不是集群更新关于topic 只会在PR1和PR2之间进行通信。
这与集群 QUEUE 行为不同。当您第一次将 QUEUE 集群到 PR 队列管理器时,它将通知 FR(完整存储库)有关 QUEUE 的信息。此时 FR 不需要通知其他 PR(他们无论如何都会通知其他 FR)。如果你想把那个集群队列放在另一个 PR 上,如果 PR 不知道队列,它将去 FR 查看队列是否存在,如果存在,FR 将有关它的信息发送给 PR。然后 FR 知道 PR 对该对象感兴趣,并且对集群 QUEUE 的任何进一步更新仅发送给感兴趣的 PR。如果应用程序继续放入集群队列以保持这种兴趣,PR 也会定期让 FR 知道他们仍然感兴趣,但是如果应用程序最终停止使用该队列,PR 将不会表达兴趣并且 FR 将停止向该队列发送更新公关
在 MQ v8 中,IBM 为集群添加了路由 pub/sub,原来的现在称为直接 pub/sub。
您现在可以使用新属性 CLROUTE
更改集群主题的行为,这可以设置为 DIRECT
,这是默认设置,可以像 MQ v8 之前那样工作,或者您可以通过将其设置为 TOPICHOST
.
我所说的第一部分保持不变,因为集群中的每个 PR 都会从 FR 获得有关新集群 TOPIC 的更新,但他们只会了解您在其上定义 TOPIC 的那个 PR不是集群中的所有其他队列管理器。
当订阅一个TOPIC时,订阅所在的PR只会连接到CLROUTE(TOPICHOST)
定义的集群TOPIC的PR,不会连接到所有其他PR来创建代理订阅.如果消息发布到任何 PR 上的主题,该 PR 将仅将其发送到 TOPICHOST,然后 TOPICHOST 将其发送到通知它代理订阅的其他 PR。 (请注意,您可以而且应该拥有多个 TOPICHOST 以实现冗余,但我没有深入了解这些细节)。
来自 IBM MQ L2 支持的 Angel Rivera 就此主题进行了非常好的网络广播,您可以在此处访问音频的 PDF 和 MP3:MQ Pub/Sub: Topic host routing clusters。