Cluster computing webspheremq集群

Cluster computing webspheremq集群,cluster-computing,ibm-mq,Cluster Computing,Ibm Mq,我对websphere MQ非常陌生,因此如果我使用的术语不正确,请原谅。我们正在做一个项目,其中需要设置一个MQ集群以实现高可用性 客户端应用程序为订阅服务器和发布服务器维护与队列管理器的连接池。假设我们在一个集群中有两个队列管理器,它们托管具有相同名称的队列。每个队列都有自己的订阅服务器和发布服务器集,这些订阅服务器和发布服务器由客户端应用程序缓存。假设其中一个队列管理器宕机,该队列管理器上队列的订阅者和发布者将死亡,从而使客户机应用程序上的对象失效 在这种情况下,可以考虑以下情况吗 1]

我对websphere MQ非常陌生,因此如果我使用的术语不正确,请原谅。我们正在做一个项目,其中需要设置一个MQ集群以实现高可用性

客户端应用程序为订阅服务器和发布服务器维护与队列管理器的连接池。假设我们在一个集群中有两个队列管理器,它们托管具有相同名称的队列。每个队列都有自己的订阅服务器和发布服务器集,这些订阅服务器和发布服务器由客户端应用程序缓存。假设其中一个队列管理器宕机,该队列管理器上队列的订阅者和发布者将死亡,从而使客户机应用程序上的对象失效

在这种情况下,可以考虑以下情况吗

1] 当第一个QueueManager崩溃时,其队列上的消息将传输到群集中的其他QueueManager

2] 当QueueManager再次出现时,是否有任何机制来恢复发布服务器和订阅服务器。目前,我们在客户端应用程序中编写了一个自动恢复线程,尝试重新连接失败的发布服务器和订阅服务器。但是在集群设置的情况下,我们担心发布者和订阅者将重新连接到另一个运行的qmanager。当崩溃的queuemanager恢复时,将不会有发布者和订阅者


有人能解释一下如何处理上述两种情况吗

WMQ集群是一个高级主题。在尝试任何事情之前,您必须首先对WMQ进行大量的阅读,并理解WMQ世界中的集群意味着什么

WMQ集群在许多方面不同于传统集群。与传统集群不同,例如在主动/被动集群中,数据将在应用程序的主动和被动实例之间共享。在任何时间点,应用程序的活动实例都将处理数据。当主动实例关闭时,被动实例接管并开始处理。WMQ集群中的情况并非如此,因为集群中的队列管理器是唯一的,因此这些队列管理器承载的队列/主题不会共享。两个队列管理器中的队列/主题可能相同,但由于队列管理器不同,因此不会共享消息、主题、订阅等

回答您的问题。
1) 否。如果消息持续存在,将保留在崩溃的队列管理器中。它们不会被传输到其他队列管理器。由于队列管理器本身不可用,因此在启动队列管理器之前,无法执行任何操作。
2) 不,队列管理器不能这样做。应用程序的职责是检查队列管理器的可用性并重新连接。WMQ提供自动客户端重新连接功能,在WMQ客户端库中,当它们检测到连接中断错误时,会自动重新连接到队列管理器。此功能可从WMQV7.x及更高版本的C和Java客户端获得。C#客户端支持v7.1中的功能

对于您的高可用性需求,您可以考虑使用WMQ的多实例队列管理器特性。此功能启用在两台不同计算机上运行的同一队列管理器的主动/被动实例。队列管理器的活动实例将处理客户端连接,而被动实例将处于睡眠模式。这两个实例将共享数据和日志。一旦活动实例停止,被动实例将变为活动实例。在活动队列管理器关闭之前,您可以访问队列中的所有持久消息


有关多实例队列管理器的更多信息,请阅读WMQ信息中心。

要补充Shashi的答案,要充分利用WMQ群集,您需要在消息的发送者和接收者之间进行网络跳跃。WMQ集群是关于QMGR之间如何交谈的。它与客户端应用程序如何与QMgrs通信以及不复制消息无关。在集群中,当消息必须从一个QMgr发送到另一个QMgr时,集群会确定将消息路由到何处。如果单个目标队列有多个群集实例,则消息有资格路由到其中任何一个。如果发送方和接收方之间没有网络跳,则消息不需要离开本地QMgr,因此永远不会调用WMQ群集行为,即使所涉及的QMgr可能参与群集

在传统的WMQ集群体系结构中,接收器都侦听同一队列的多个实例,具有相同的名称,分布在多个QMGR上。发送方有一个或多个QMGR,它们可以在其中连接和发送请求(激发和忘记),可能正在等待答复(请求-答复)。由于消息的接收者提供了一些服务,我将他们的QMgrs称为“服务提供者QMgrs”。消息的发送者所在的QMgrs是“服务消费者”QMgrs,因为这些应用程序是服务的消费者

下面的幻灯片来自我在WMQ架构咨询项目中使用的演示文稿

请注意,服务的使用者(发送请求消息的东西)会进行故障转移。侦听服务端点队列和提供服务的事物不会进行故障转移。这是因为需要确保始终为每个活动服务端点队列提供服务。通常,每个应用程序实例在两个或多个队列实例上持有一个输入句柄。这样,QMgr可以关闭,所有应用程序实例都保持活动状态。如果某个应用程序实例宕机,其他一些应用程序实例将继续为其队列提供服务。如果需要,服务提供者与特定QMGR的这种亲和力还可以实现XA事务性

我发现最好的解释WMQ HA的方法是来自IMPACT conference的幻灯片:

WebSphereMQ集群确保服务保持可用,即使集群队列的实例可能不可用。群集中的新消息将路由到剩余的队列实例。硬件集群或多实例QMgr(MIQM)提供