我在微软世界工作,需要创建一个事务处理Web服务。 Web服务将接收事务并将其提交到队列。第二个服务将事务从队列中拉出并处理它们。
我一直在考虑两种不同的方法:数据库表(滚动我自己的队列)和微型队列(MSMQ)。
对于不同的队列技术,人们对方法或建议有利弊吗?
答案 0 :(得分:4)
这不是一个真正的开发问题,但我确实有一些意见。
这取决于您的排队要求有多高级,以及您的运营人员将拥有哪些运营经验和技能。
如果您将部署到他们熟悉并喜欢SQL Server的商店,但没有管理MSMQ的经验,那么使用SQL作为队列(实质上是向SQL添加一个额外的表)将很容易他们做 - 基本上没有额外的运营成本。另一方面,使用MSMQ将需要员工接受培训,开发和验证新程序,新备份计划,新的监控和管理工具等。反之亦然 - 在极少数情况下,商店对MSMQ有很好的体验,但对SQL Server的经验却很少。在这种情况下,反之亦然:与MSMQ一起使用。
可能是您对队列的使用是结构化的,因此您不关心备份或减轻数据丢失。在这种情况下,您不打算进行任何监视或维护。在这种情况下,使用MSMQ将意味着几乎零额外的运营成本,无论员工现有的技能如何,因为设置将是一次性的事情,并且持续的维护是最小的。
第二个标准是您使用队列。如果要大量使用队列,假设每个服务器每小时有数百万个事务,那么您可能需要一个专用的队列服务,而不是捎带到现有数据库。如果您想利用各种MSMQ功能,如死信队列,优先级消息,触发,通讯组列表和相关ID,那么建议使用MSMQ。另一方面,如果您的卷很低(例如,每小时数百个事务),并且您没有使用更高级的队列功能,那么您可以在SQL表的顶部使用队列外观。十分简单。
如何平衡这两个主要标准是由您决定的。
非标准包括:可编程性(两种选项都易于在各种语言中开发),交易量(两者都可以处理小到大的数量),数据格式(两者都是灵活的数据内容和格式)。
在任何情况下,如果您已在运行Windows Server,我建议不要使用备用队列。 IBM在Websphere MQ(nee MQSeries)中有一个很好的,但它不是免费的,就像MSMQ一样。除非您正在进行多平台队列网络,否则您可能不需要MQSeries。我不认为任何其他排队系统足够主流以供考虑。
如果你不想稍微改变你的模型 - 你可能会对微软最近做过的WCF和WF的结合感兴趣。它允许WCF服务启动工作流(WF)。 WF引擎本身支持排队,调度和钝化 - 基本上有一个队列支持它,但作为程序员,你不直接处理队列隐喻。相反,它是一个新的“工作流程”比喻。像MSMQ一样,WCF和WF都是免费的(也就是说,除了授权Windows Server的成本之外没有额外的成本);并包含在Windows Server中。这种WCF + WF方法可能是一个更具吸引力的模型,供您用于新开发,或者您更喜欢利用WF设计器和工具。与MS应用程序平台的其余部分一样,WF支持事务访问,因此您可以提供即发即忘的语义。
祝你好运。