SQL Service Broker与自定义队列

时间:2009-09-24 10:02:08

标签: c# asp.net sql-server

我正在创建一个群发邮件应用程序,其中一个Web应用程序设置一个电子邮件模板,然后将一堆电子邮件地址排队等待发送。另一方将是一个Windows服务(或exe),它将轮询此队列,然后选择要发送的消息。

我的问题是,使用SQL Service Broker(或MSMQ)而不仅仅是创建我自己的自定义队列表有什么好处?

我正在阅读的所有内容都暗示我使用的是Service Broker,但我真的看不出平板表的巨大优势(这对我来说简单易用)。作为参考,该应用程序几乎每天都会用于发送50,000-100,000封电子邮件。

3 个答案:

答案 0 :(得分:12)

知道如何在平面表上实现队列?这不是一个愚蠢的问题,正确地在表上实现队列比听起来要困难得多。类似队列的表非常容易出现死锁,您需要仔细考虑表设计以及入队和出列操作。另外,你知道如何扩展你的表池吗?你如何处理重试和超时(即timers用于什么)?

我不是说你应该使用SSB。学习曲线非常陡峭并且主要是分布式应用平台,而不是本地排队产品,因此某些功能(如对话框)实际上将成为您的障碍而不是优势。我只是说你必须考虑平桌排队的困难。如果您从未实现过平台队列,那么请注意,该桥下有很多龙。

天50k-100k消息什么都不是,每秒只有一条消息。如果您希望每分钟100k ,那么我们可以谈谈。

答案 1 :(得分:2)

有关Service Broker的优势,请参阅以下链接:

http://msdn.microsoft.com/en-us/library/ms166063.aspx

一般来说,我们尝试使用工具或标准功能,而不是自己构建。这降低了成本,可以使升级更容易。

答案 2 :(得分:2)

如果您需要移植到其他供应商的数据库,如果使用普通表,则问题会更少。

由于您似乎只有一个读取器和一个写入队列,我倾向于使用标准表,直到您遇到问题。但是,如果您开始觉得需要使用“锁定提示”等,那就是切换到Service Broker队列的时间。

如果发件人和读者都需要数据库连接才能工作,我就不会使用MSMQ。如果发送者根本不与数据库通信,那么MSMQ会很好,因为它可以让发送者在数据库关闭时继续工作。但是,必须设置和维护MSMQ和数据库可能需要更多工作,因此对大多数系统来说都是值得的。