如何扇出SQS

时间:2019-01-29 10:34:33

标签: amazon-web-services amazon-sqs

我有多个来源将原始数据推送到S3。我已经在我的S3存储桶上配置了SQS事件通知。 问题是滞后和局限性。 我预计在不久的将来将会有更多的来源,并且由于我们只能从SQS的一次民意测验中获得10条消息,因此我认为在不久的将来会有更多的来源将数据推送到S3时,SQS将成为充满了几千条消息,我将无法更快地处理它们。 我正在考虑将sqs散开,例如将消息从我的主SQS队列传播到更多SQS队列,以便我的处理层可以轮询多个队列,例如:5个队列并处理更多消息。 可能的方法应该是什么。

2 个答案:

答案 0 :(得分:3)

将消息扇出到多个sqs队列的典型方法是使用SNS。

s3事件通知将转到SNS而不是SQS,并且SNS将负责将这些消息散发到所需的尽可能多的队列中。

也就是说,我不确定我是否理解为什么您认为如果使用多个消息队列,您将能够更快地处理消息。

由多个处理客户端或单个客户端使用多线程轮询单个队列SQS队列可能是比简单引入更多队列更好的提高处理速度的方法。

答案 1 :(得分:0)

  

“ ...,因为我们一次只能从SQS中获取10条消息...我正在考虑散布sqs,例如将消息从我的主SQS队列传播到更多SQS队列,以便我的处理层可以轮询多个队列,例如:5个队列并处理更多消息。“

简短回答:请勿这样做。

这是原因:

是的,一次民意调查最多可以检索10条消息。但是,您可以多个线程和多个主机都轮询一个队列。使您的使用者并行运行是这里的关键,因为处理队列条目将成为您的瓶颈-不能从队列中检索条目。一个SQS队列可以处理大量轮询线程。

您建议的多队列扇出有很多缺点:

  1. 编码和操作更加复杂
  2. 速度慢-物品必须经历从主队列(或SNS,如果使用的话)到消耗队列的转移的开销
  3. 更昂贵-每封邮件的SQS费用。每封邮件收取SNS费用。
  4. 您将不得不自己处理重复事务-使用单个队列,SQS内置的可见性超时将在大多数情况下阻止其他消费者处理相同的项目。如果有多个队列,则必须提出自己的重复数据删除策略
  5. 只使用一个队列。待会儿我会谢谢你。