我正在debugging我们的应用程序运行在3节点故障转移群集与MSMQ群集组的消息队列的网站上。 我们看到,该系统在一些节点组合上工作,但不是全部,因此故障安全性不如预期。
问题是从群集队列接收消息。
当我们的应用程序在群集节点B或C上运行时,无论MSMQ运行在哪个节点(工作=我们的应用程序接收消息),它都能正常工作。 当我们的应用程序运行在节点A上时,由于消息队列服务不可用而失败,无论MSMQ在哪里运行。
为了更加混淆事物,我创build了一个带有GUI客户端的小型WCF-MQ代理服务,允许我向服务发送一个命令,然后服务将发送到客户端指定的消息队列或从消息队列接收 – 在这个过程中尽可能多地给予反馈。 该模式与此应用程序相同,除了失败的节点是节点C – 无论MSMQ在哪里运行。
以下是我检查的一些事情:
我只是一个开发人员,而不是任何方式的微软基础架构专家,所以我想问一下在debugging这样的集群式MSMQ安装时,build议采取什么措施?
好吧,经过几个星期的debugging,我自己和微软的Message Queue支持团队一起,find了一个解决scheme。
TLDR; 解决方法是删除或重命名registry项
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\<SERVICENAME>\Environment
错误的原因是MQ客户端无法在本地系统上findMQ服务 – 这是与远程MQ进行通信所必需的 – 有点类似于将您的电子邮件转发到远程系统的本地SMTP服务。 但是,本地系统不是本例中的集群节点,而是“集群组”,并且在集群组上没有运行MQ服务(因为它不是真正的系统,只是一个别名)。 MQ客户端在群集组上查找服务的原因是在群集服务设置中已选中“使用计算机名称的networking名称”checkbox。 这在群集节点的registry中增加了一个新的值,为服务设置了环境。 而真正的问题是,当这个checkbox被打开时,它不会从registry中删除这个值,从而无法在设置好之后从GUI中正确地清除设置。 所以修正是用regedit或regedt手动删除这个值。