2

我正在研究 WCF/MSMQ。

有谁知道如何使用 MSMQ 处理冗余?我的理解是队列位于服务器上,但是如果服务器出现故障并且无法恢复怎么办,如何防止消息丢失?

关于这个主题的任何好文章?

4

2 回答 2

6

这里有一篇关于在企业中使用 MSMQ 的好文章。

提示 8 是您应该阅读的。

“使用 Microsoft 的 Windows 集群工具,如果其中一台队列服务器机器停止正常运行,队列将从一台机器故障转移到另一台机器。故障转移过程将队列及其内容从故障机器移动到备份机器。微软的集群工作,但在根据我的经验,很难正确配置并且经常出现故障。此外,要运行 Microsoft 的 Cluster Server,您还必须运行 Windows Server Enterprise Edition——这是一个昂贵的许可操作系统。这些问题加在一起值得寻找替代品。

使用 Microsoft 的 Cluster Server 的一种替代方法是使用第三方 IP 负载平衡解决方案,其中有几个是市售的。这些设备像标准网络交换机一样连接到您的网络,一旦配置完成,就会在配置的设备之间对 IP 会话进行负载平衡。要对 MSMQ 进行负载均衡,您只需在负载均衡设备上设置一个虚拟 IP 地址并将其配置为负载均衡端口 1801。要连接到 MSMQ 队列,发送应用程序指定负载均衡托管的虚拟 IP 地址设备,然后将负载有效地分配到托管接收应用程序的已配置机器上。

要使用硬件负载平衡器,您需要在配置为用于负载平衡的每台服务器上创建相同的队列,让负载平衡器将发送应用程序连接到组中的任何一台机器。为了增加额外的稳健性,您还可以配置所有接收应用程序以监控组中所有其他机器的队列,这有助于防止在一台或多台机器不可用时出现问题。在远程机器上进行这种队列监控的成本很高(从本地队列读取消息几乎总是更有效),但额外的可用性级别可能值得付出代价。”

于 2009-01-30T22:56:38.243 回答
1

不要冷嘲热讽,但你有点回答了你自己的问题。如果服务器不可恢复,则您无法恢复消息。

话虽如此,您可能希望定期备份消息文件夹。这篇 TechNet 文章将告诉您如何操作:

http://technet.microsoft.com/en-us/library/cc773213.aspx

此外,它不会备份快递信息,因此您必须注意这一点。

如果您愿意,您可能希望在收到实际消息后将其存储在数据库中进行处理,并让服务成为生产者/消费者模式中的消费者。

于 2009-01-30T23:00:21.607 回答