使用Amazon SQS的最佳做法 - 轮询队列

时间:2010-04-20 22:04:51

标签: c# amazon-web-services amazon-sqs

我正在为我们的电子商务网站设计发送电子邮件的服务(订单确认,提醒等......) 计划是使用“SendEmail”方法,该方法生成一大块代表要发送的电子邮件的XML,并将其粘贴在Amazon SQS队列上。 我的网络应用程序和其他应用程序将使用它来“发送”电子邮件。

然后,我需要一种检查队列的方法,并实际发送电子邮件。 (我知道我将如何发送电子邮件)

我很想知道“轮询”队列的最佳方式是什么?

我应该创建一个Windows服务,并使用像Quartz.net这样的程序来安排它每隔x分钟检查一次队列吗? 有没有更好的方法呢?

5 个答案:

答案 0 :(得分:25)

听起来像Amazon SNS更像是你的哈克贝利。 (不太确定这意味着什么,但我曾在电影中看过它。)

SQS更像是一个“希望有人在它到期前的某个时刻来寻找这个消息!” SNS看起来更像是“我需要确保它能够立即得到任何需要它的人!”

它甚至包括作为预建交通工具的电子邮件。 (甚至不确定这是否是正确的词)

  

Amazon SNS提供了一个简单的Web服务接口,可用于创建您想要通知应用程序(或人员)的主题,订阅客户端到这些主题,发布消息,并通过客户端选择的协议传递这些消息(即HTTP,电子邮件等)。 Amazon SNS使用“推送”机制向客户端发送通知,无需定期检查或“轮询”新信息和更新。

可以肯定的是,它们与其他服务具有相同的免费增值模式,并且对电子邮件有限制:

  

您可以免费使用Amazon SNS。每个月,Amazon SNS客户不会为前100,000个Amazon SNS请求支付任何费用,不会对通过HTTP发出的前100,000个通知收取任何费用,也不会对通过电子邮件发送的前1,000个通知收取任何费用。

答案 1 :(得分:3)

如果我是你,如果我真的想让SQS在这种情况下工作,我会创建一个Windows服务,每10分钟从队列中检索一次消息,然后发送它们。

如果我可以使用其他服务,我会认真考虑使用类似Postmark的内容(由于对Jeff Atwood’s blog post的评论,我今天才发现这一点)。您只需将您的电子邮件信息提交给他们的api,他们将完成剩下的工作。他们甚至有一个api来检查退回的电子邮件。我从来没有使用过这项服务,但我认为这听起来不错,并且会认真考虑将来使用它。

答案 2 :(得分:1)

看起来SES就是您所需要的。 http://aws.amazon.com/ses/与其他类似服务或构建其他系统相比,它也非常便宜。

答案 3 :(得分:0)

您可以使用AWS Beanstalk服务来使用队列中的任务。 http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features-managing-env-tiers.html

答案 4 :(得分:0)

Windows服务是最好的方法,但你不能接受它。要在ASP.NET环境中运行后台作业,请HostingEnvironment.QueueBackgroundWorkItem。实施继续轮询(通过长轮询)的一个很好的起点是sqs-consumer