c# - Message Queue 服务不可用

标签 c# tcp cluster-computing msmq

我有一个 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/

相关文章:

c# - 无法使用 NET.TCP 绑定(bind)访问 WCF 服务

cassandra - 使用虚拟节点在种子节点(总共 2 个)死亡时重新平衡 Cassandra 1.2 集群

c# - 如何检查我的 C# - MySQL 连接是否成功,或者如果不成功,返回原因?

multithreading - 同步 TCP 消息

c# - 显示hadoop内容C#

tcp - 为什么 UDP 在有损网络中表现优于 TCP

node.js - Node 集群 worker 内存使用情况

hadoop - Spark : Execute python script with Spark based on Hadoop Multinode

c# - Infragistics - 设置 Excel 单元格背景色

c# - ASP.NET MVC 验证在加载页面后显示错误