要添加到 Shashi 的答案,要充分利用 WMQ 集群,您需要在消息的发送者和接收者之间建立一个网络跃点。WMQ 集群是关于 QMgrs 之间如何对话。它与客户端应用程序如何与 QMgrs 对话无关,也不复制消息。在集群中,当消息必须从一个 QMgr 传递到另一个 QMgr 时,集群会确定将其路由到何处。如果单个目标队列有多个集群实例,则消息有资格被路由到其中的任何一个。如果发送方和接收方之间没有网络跳跃,则消息不需要离开本地 QMgr,因此永远不会调用 WMQ 集群行为,即使所涉及的 QMgr 可能参与集群。
在传统的 WMQ 集群架构中,接收者都侦听同一队列的多个实例,具有相同的名称,分布在多个 QMgrs 中。发送者有一个或多个 QMgrs,他们可以在其中连接和发送请求(即发即弃),可能等待回复(请求-回复)。由于消息的接收者提供一些服务,我称他们的 QMgrs 为“服务提供者 QMgrs”。消息发送者所在的 QMgrs 是“服务消费者”QMgrs,因为这些应用程序是服务的消费者。
下面的幻灯片来自我在 WMQ 架构咨询活动中使用的演示文稿。
请注意,服务的消费者 - 发送请求消息的事物 - 故障转移。监听服务端点队列并提供服务的事物不会故障转移。这是因为需要确保始终为每个活动的服务端点队列提供服务。通常,每个应用程序实例都拥有两个或更多队列实例的输入句柄。这样,QMgr 可以关闭并且所有应用程序实例保持活动状态。如果一个应用程序实例出现故障,其他一些应用程序实例会继续为其队列提供服务。如果需要,服务提供者与特定 QMgrs 的这种亲和性还支持 XA 事务性。
我发现解释 WMQ HA 的最佳方式是 IMPACT 会议的幻灯片:
WebSphere MQ 集群确保服务保持可用,即使集群队列的实例可能不可用。集群中的新消息将路由到剩余的队列实例。硬件集群或多实例 QMgr (MIQM) 提供对现有消息的访问。当主动/被动对的一侧出现故障时,只有在发生故障转移时,该 QMgr 才会短暂中断,然后辅助节点接管并使队列上的任何消息再次可用。结合了 WMQ 集群和硬件集群/MIQM 的网络可提供最高级别的可用性。
请记住,这些配置中都没有跨节点复制的消息。WMQ 消息总是有一个物理位置。有关这方面的更多信息,请参阅灾难恢复思考。