gpt4 book ai didi

c# - Message Queue 服务不可用

转载 作者:可可西里 更新时间:2023-11-01 02:54:48 25 4
gpt4 key购买 nike

我有一个 TCP 服务器,在 Windows 集群中作为 Windows 服务运行。它接收消息并将它们放入队列 (MSMQ)。我创建了一个公共(public) MSMQ 队列。我收到此错误消息:

System.Messaging.MessageQueueException (0x80004005): Message Queue service is not available.
at System.Messaging.MessageQueue.MQCacheableInfo.get_WriteHandle()
at System.Messaging.MessageQueue.StaleSafeSendMessage(MQPROPS properties, IntPtr transaction)
at System.Messaging.MessageQueue.SendInternal(Object obj, MessageQueueTransaction internalTransaction, MessageQueueTransactionType transactionType)

我以这种方式发送消息到队列:

static void SendHelper(UncookedMessage uncooked)
{
var msg = new Message(uncooked);
msg.Formatter = new XmlMessageFormatter(new[] { typeof(UncookedMessage) });

// (PER MESSAGE)
msg.UseJournalQueue = false;
msg.AttachSenderId = false;
msg.Recoverable = true;

SingleQueue.Send(msg);
}

队列安全性为服务器和集群中定义的每个用户提供完全访问权限。我的队列名称是:FormatName:DIRECT=OS:application9\uncooked_message_single;但我已经测试了 application9\uncooked_message_singleapplication9.domain.com\uncooked_message_singleFormatName:DIRECT=OS:application9.domain.com\uncooked_message_single .没有人工作。

注意:此应用在非集群服务器上与专用队列完美配合。我不太了解 Windows 集群,但我们的管理员说它是故障转移集群,并且在 Windows Server 2012 上。

最佳答案

由于错误消息告诉您它无法使用请求的 MSMQ 服务,因此我建议检查这些服务是否已正确设置。

在深入了解集群配置之前,我建议您...

  • ...明确检查集群服务器上队列的访问权限(不是在单个集群节点上) .

  • ...检查网络中是否有防火墙阻止您的消息。

当您在非集群环境中成功尝试您的方案时,集群环境中可能明显存在差异。

事实上,在集群服务器上设置 MSMQ 需要与在非集群服务器上不同的配置。

确保 MSMQ 服务和 分布式事务处理协调器 (DTC) 服务在每个硬件节点上启动并运行。

Failover Cluster Manager中,将MSMQ和DTC服务设置为集群资源,然后将MSMQ配置为依赖于集群DTC作为“dependendy” 对单击 MSMQ -> Properties -> Dependencies

不要忘记再次检查您要在集群服务器 上使用的队列的访问权限。在单个节点上设置队列不起作用。

我不知道这是否在所有情况下都是强制性的,但在我们的集群上,我们也有一个文件共享配置为 MSMQ 的依赖项。据我了解,这应该确保 MSMQ 所需的临时文件在节点切换后仍然可用。

此外,这里有两篇文章,我发现它们对设置集群节点非常有帮助。它们可能有助于逐步确认您的配置是否正确:

关于c# - Message Queue 服务不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15220165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com