2011-05-04 95 views
2

我正在考虑在基于一堆WCF服务的产品中添加队列函数。我读过一些关于MSMQ的知识,首先我认为这是我需要的,但我不确定,并且正在考虑将队列放入数据库表中。我想知道这里的somone是否会得到一些反馈意见。在负载平衡环境中的WCF服务之间的MSMQ

基本上,我打算在http上调用外观WCF服务。立面服务应该只将所有传入消息写入队列,以对呼叫系统作出快速响应。队列中的消息应该由另一个组件来处理,这些组件可以是WCF服务或Windows服务,具体取决于我选择的队列。

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

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

  1. 要让门面WCF写入到MSMQ,然后有anothther WCF服务从队列中读取做消息的处理。从我读到的内容来看,我对这种替代方法并不感到自信,因为它将如何在负载平衡的环境中工作。

1A。 MSMQ应该放在哪里?每个Web服务器上有一个?一个在单独的服务器上?在单独的服务器上多重? (不考虑冗余的需要,并且罕见情况下的数据可能丢失并重新发送)

1B。如果我想让系统冗余,设计会如何影响?我希望能够保持MSMQ而不丢失该队列中的数据,从而失去一台服务器(它再也不会在线)。从我读过的有关MSMQ的文章中,我可以看出将MSMQ放置在Windows群集上的唯一选择。那是对的吗? (我想避免使用这个窗口集群)。

  1. 第二个设计方案是让外观WCF服务将队列写入数据库。然后有两个或多个Windows服务来处理队列。我对这个选择没有任何问题。如果你想知道为什么我不选择这个,因为它对我来说似乎更简单,那是因为我想建立这个不会为解决方案引入任何Windows服务,我相信MSMQ得到了我不想要的功能代码我自己,我也很好奇使用MSMQ,因为我从来没有使用它。

问候 哈坎

回答

0

容易的选择阅读更多一些的subjet我剃须刀决定不使用MSMQ后。看来我真的没有理由走上这条路。我需要这是非事务性的,据我所知,没有任何日志或死信技术将帮助我满足冗余要求。

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

MSQM只会增加令人兴奋的解决方案的复杂性,另一种技术以及可能需要跟踪的另一台服务器。

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

所有这一切使我领先我的接收应用程序与WCF门面接受http调用写入数据库队列。这个数据库已经被保护免于数据丢失。该队列将被包含所有繁重业务逻辑的Windows Servce的多个活动实例轮询。由于进程优先级较低,这些服务可以托管在负载平衡Web应用程序使用的已有节点上。如果我有时间使用MSMQ,或者如果我在应用程序中需要另一个原因,我可能会改变我的决定。

2

好了,你不使用WCF与MSMQ集成,您正在使用WCF创建MSMQ消息作为最终产品。这简化了“我如何平衡MSMQ?”

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

您不需要群集MSMQ以使其具有弹性。您可以让代码具有弹性,以便使用死信队列,事务队列,日记等处理丢失的消息。硬件集群是:-)

+0

您提到了两个选项,一个中央队列或带有中央接收器的本地队列。我会阅读你提供的链接,也许他们会提供帮助。我会告诉你。由于我是新来的如何做WCF-MSMQ的事情,我不知道我在想什么与“与MSMQ集成的WCF”有什么不同。 – 2011-05-05 07:31:58

+0

“带有MSMQ集成的WCF”意味着使用MSMQ作为传输协议,而不是HTTP将WCF调用传递给服务。 – 2011-05-05 17:38:08

+0

这与“WCF MSQM集成”有何不同之处在于为我节省了一些编码吗? – 2011-05-10 09:36:11