【问题标题】:MSMQ redundancyMSMQ 冗余
【发布时间】:2009-01-30 22:45:37
【问题描述】:

我正在研究 WCF/MSMQ。

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

有没有关于这个主题的好文章?

【问题讨论】:

    标签: msmq


    【解决方案1】:

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

    提示 8 是您应该阅读的。

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

    使用 Microsoft 的 Cluster Server 的一种替代方法是使用第三方 IP 负载平衡解决方案,其中有几个是市售的。这些设备像标准网络交换机一样连接到您的网络,一旦配置完成,就会在配置的设备之间对 IP 会话进行负载平衡。要对 MSMQ 进行负载均衡,您只需在负载均衡设备上设置一个虚拟 IP 地址并将其配置为负载均衡端口 1801。要连接到 MSMQ 队列,发送应用程序指定负载均衡托管的虚拟 IP 地址设备,然后将负载有效地分配到托管接收应用程序的已配置机器上。这不仅增加了您可以处理的消息的容量(通过让您向服务器场添加更多机器),而且还保护您免受服务器故障导致的停机事件。

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

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      【讨论】: