1

MQ 客户端是否提供在客户端配置中定义多个 MQ Server 主机的能力?我无法找到任何关于它的信息。我想让多个 MQ 服务器在同一个队列中可用,如果其中一个不可用,则让客户端尝试连接到另一台服务器。我希望像某些数据库实例一样,您可以定义大量主机,并且客户端驱动程序将路由到可用的主机。

我知道我们可以添加在连接错误时连接到不同服务器的逻辑,但如果可能的话,希望使用驱动程序来执行此操作。

使用 .Net 4.0 WCF / WebSphere MQ 7.1

任何信息/意见将不胜感激。

4

1 回答 1

1

Shashi 是 WMQ .Net 大师,所以我将在评论中参考他的链接,了解 .Net 的具体答案。

架构的答案是你可能把这件事复杂化了。如果有问题的队列被通告到集群并且应用程序正在向它发送消息,那么应用程序只需要连接到集群中的任何 QMgr 并放入该队列。它可以动态创建一个回复队列并使用该句柄来指定请求消息的回复地址。理想情况下,服务请求者应用程序是远离目标队列的网络跃点,以便它们可以将 WMQ 集群用于您描述的目的。

有一个稍微不太理想的场景,其中客户端连接到托管目标队列实例的 QMgr 实例之一。可以配置队列的CLWLUSEQ属性,以便在本地和远程队列实例之间分发消息。

在应用程序发送请求消息的任何情况下,都可以为其提供一个CONNAME包含逗号分隔的合格 QMgrs 列表,它可以连接到该列表。现代版本的 WMQ 允许您在CONNAME使用MQCONNXAPI 时指定多个连接点。当前和旧客户端都可以使用CCDT包含多个连接定义的文件,并允许客户端在它们之间切换。

如果应用程序正在监听在请求队列中,这是一个不同的故事。如果该应用程序是事务性的,则无法将其配置为故障转移到另一个 QMgr。这是因为 XA 事务只能在同一个 QMgr 实例上解析。但即使撇开事务问题不谈,您通常也不希望侦听请求的应用程序发生故障转移。这样做会使队列的本地实例得不到服务,并且消息会在那里堆积。更好的答案是运行服务器端应用程序的多个实例,以便每个队列实例至少有两个应用程序实例为其提供服务。这样,您就可以中断其中一个应用程序实例,而不会出现未提供服务的队列。同样,如果 QMgr 出现故障,消息会自动路由到集群中由其他应用程序实例提供服务的剩余队列实例。

还有许多其他架构原因适用于请求/回复场景并导致集群解决方案。其他注意事项适用于不同类型的消息传递,但总的来说,答案是肯定的,可以通过多种方式配置客户端以故障转移到另一个队列管理器。所有这些都是基于 QMgr 变得不可用,而不是队列本身。如果您尝试捕获的事件是队列填充或有人 PUT(DISABLE) 它,那么最好的答案是检测和监控,第二好的答案是应用程序逻辑。

于 2013-06-28T03:08:29.497 回答