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