我正在考虑在基于一堆WCF服务的产品中添加队列功能。我已经阅读了一些关于MSMQ的内容,首先我认为这是我需要的,但我不确定并且正在考虑将队列放在数据库表中。我想知道这里的somone是否得到了一些关于哪条路的反馈。
基本上我打算通过http调用一个外观WCF服务。外观服务应该只将所有传入消息写入队列,以便快速响应调用系统。然后,队列中的消息应由另一个组件处理,无论是WCF服务还是Windows服务,这取决于我选择的队列。
该产品在负载均衡的环境中运行,具有2到n个Web服务器。
我正在考虑的选项和我得到的问题是:
1A。 MSMQ应该放在哪里?每个Web服务器一个?一个在单独的服务器上?多个服务器上的多个? (不考虑需要冗余,并且极少数情况下的数据可能丢失并重新发送)
1B。如果我想让系统冗余,设计会如何影响?我希望能够在不丢失该队列中的数据的情况下丢失服务器(它永远不会再次联机)。从我读到的关于MSMQ的内容中,我将MSMQ置于Windows集群上的唯一选择。那是对的吗? (我想避免使用Windows群集。)
最诚挚的问候 哈坎
答案 0 :(得分:2)
好的,所以你没有使用WCF与MSMQ集成,你正在使用WCF创建MSMQ消息作为最终产品。这简化了“如何对MSMQ进行负载均衡?”
您使用的安排基于最适合您的方式。 您可以让多个Web服务器将消息发送到中央计算机上的远程队列。 相反,你可以让一个网络服务器将消息放入本地队列,中央机器轮询新来的队列。
您无需群集MSMQ即可使其具有弹性。您可以改为使代码具有弹性,以便使用死信队列,事务队列,日记等处理丢失的邮件。硬件集群是一个简单的选择: - )
答案 1 :(得分:0)
在子喷气机上阅读了更多内容后,我决定不使用MSMQ。看来我真的没理由走这条路。我需要这是非事务性的,据我所知,没有任何日志或死信技术可以帮助我满足我的冗余要求。
我的所有组件大部分时间都在线(当他们遇到访问问题时,每年可能会有几个小时)。
MSQM只会增加激动人心的解决方案的复杂性,另一种技术可能是另一种能够跟踪的服务器。
要获得完全冗余以防止MSMQ中的数据丢失,我将需要一个Windows群集或实现发送/接收到多个相同的队列。我不想做其中任何一个。
所有这些都引导我使用WCF外观接收写入数据库队列的http调用来接收我的接收应用程序。此数据库已受到保护,不会丢失数据。该队列将由包含所有繁重业务逻辑的Windows Servce的多个活动实例进行轮询。由于进程优先级较低,这些服务可以托管在负载密集Web应用程序使用的现有节点上。如果我有时间使用MSMQ,或者如果我在申请中出于其他原因需要它,我可能会改变我的决定。