负载平衡环境中WCF服务之间的MSMQ

时间:2011-05-04 08:49:50

标签: wcf msmq msmq-wcf

我正在考虑在基于一堆WCF服务的产品中添加队列功能。我已经阅读了一些关于MSMQ的内容,首先我认为这是我需要的,但我不确定并且正在考虑将队列放在数据库表中。我想知道这里的somone是否得到了一些关于哪条路的反馈。

基本上我打算通过http调用一个外观WCF服务。外观服务应该只将所有传入消息写入队列,以便快速响应调用系统。然后,队列中的消息应由另一个组件处理,无论是WCF服务还是Windows服务,这取决于我选择的队列。

该产品在负载均衡的环境中运行,具有2到n个Web服务器。

我正在考虑的选项和我得到的问题是:

  1. 让外观WCF写入MSMQ,然后从该队列中读取另一个WCF服务来处理消息。从我所读到的内容来看,我对这种替代方案没有信心,这是如何在负载均衡的环境中起作用的。
  2. 1A。 MSMQ应该放在哪里?每个Web服务器一个?一个在单独的服务器上?多个服务器上的多个? (不考虑需要冗余,并且极少数情况下的数据可能丢失并重新发送)

    1B。如果我想让系统冗余,设计会如何影响?我希望能够在不丢失该队列中的数据的情况下丢失服务器(它永远不会再次联机)。从我读到的关于MSMQ的内容中,我将MSMQ置于Windows集群上的唯一选择。那是对的吗? (我想避免使用Windows群集。)

    1. 第二种设计方案是让Fac Fac WCF服务将队列写入数据库。然后有两个或多个Windows服务来处理队列。我对这个替代方案没有任何疑问。如果你想知道为什么我不选择这个,因为它对我来说似乎更简单,那是因为我想构建这个没有向解决方案引入任何Windows服务,我相信MSMQ得到了我不想要的功能自己编码,我也很好奇使用MSMQ,因为我以前从未使用它。
    2. 最诚挚的问候 哈坎

2 个答案:

答案 0 :(得分:2)

好的,所以你没有使用WCF与MSMQ集成,你正在使用WCF创建MSMQ消息作为最终产品。这简化了“如何对MSMQ进行负载均衡?”

您使用的安排基于最适合您的方式。 您可以让多个Web服务器将消息发送到中央计算机上的远程队列。 相反,你可以让一个网络服务器将消息放入本地队列,中央机器轮询新来的队列。

您无需群集MSMQ即可使其具有弹性。您可以改为使代码具有弹性,以便使用死信队列,事务队列,日记等处理丢失的邮件。硬件集群是一个简单的选择: - )

答案 1 :(得分:0)

在子喷气机上阅读了更多内容后,我决定不使用MSMQ。看来我真的没理由走这条路。我需要这是非事务性的,据我所知,没有任何日志或死信技术可以帮助我满足我的冗余要求。

我的所有组件大部分时间都在线(当他们遇到访问问题时,每年可能会有几个小时)。

MSQM只会增加激动人心的解决方案的复杂性,另一种技术可能是另一种能够跟踪的服务器。

要获得完全冗余以防止MSMQ中的数据丢失,我将需要一个Windows群集或实现发送/接收到多个相同的队列。我不想做其中任何一个。

所有这些都引导我使用WCF外观接收写入数据库队列的http调用来接收我的接收应用程序。此数据库已受到保护,不会丢失数据。该队列将由包含所有繁重业务逻辑的Windows Servce的多个活动实例进行轮询。由于进程优先级较低,这些服务可以托管在负载密集Web应用程序使用的现有节点上。如果我有时间使用MSMQ,或者如果我在申请中出于其他原因需要它,我可能会改变我的决定。