AWS:阅读SQS的多个实例

时间:2015-05-12 10:07:37

标签: amazon-web-services amazon-sqs

简单问题: 我想在Amazon上运行一个自动缩放组,它会激活多个实例来处理来自SQS队列的消息。但是,我如何知道实例不处理相同的消息?

我可以在处理时从队列中删除一条消息。但是,如果它还没有被删除并且仍然被实例处理,那么另一个实例CAN也会下载相同的消息并处理它,我认为。

2 个答案:

答案 0 :(得分:17)

除了相当远的SQS不正确地传递相同信息的可能性(你仍然需要考虑,即使它不太可能),我怀疑你的问题源于对SQS不熟悉的问题。 "可见性超时的概念。"

  

组件收到消息后,消息仍然在队列中。但是,您不希望系统中的其他组件再次接收和处理该消息。因此,Amazon SQS会通过可见性超时阻止它们,这是Amazon SQS阻止其他消费组件接收和处理该消息的一段时间。

     

http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/AboutVT.html

这使多个队列运行程序看不到相同的消息。一旦可见性超时到期,消息将再次传递给队列使用者,除非您将其删除,或者超过最大配置的传递次数(此时它将被删除或进入单独的死信队列中你配置了一个)。如果作业所需的时间超过配置的可见性超时,您的使用者也可以向SQS发送请求以更改该单个消息的可见性超时。

<强>更新

由于此答案最初编写,SQS在某些AWS区域引入了FIFO队列。它们使用与上述相同的逻辑运行,但保证按顺序传送和额外的安全措施,以保证不会发生偶尔的重复邮件传递。

  

FIFO(先进先出)队列旨在在操作和事件的顺序至关重要时,或者在不能容忍重复的情况下增强应用程序之间的消息传递。 FIFO队列还提供一次性处理,但限制为每秒300个事务(TPS)。

     

http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html

将应用程序切换到FIFO队列确实需要更改代码,并且需要创建新队列 - 现有队列无法切换到FIFO。

答案 1 :(得分:2)

您可以收到重复的邮件,但仅限于&#34; on rare occasions&#34;。所以你应该以幂等为目标。