Eri*_*Ven 7 amazon-sqs amazon-web-services
简单的问题:我想在亚马逊上运行一个自动缩放组,它会激活多个处理来自SQS队列的消息的实例.但是,我如何知道实例不处理相同的消息?
我可以在处理时从队列中删除一条消息.但是,如果它还没有被删除并且仍然被实例处理,那么另一个实例CAN也可以下载相同的消息并对其进行处理.
Mic*_*bot 18
除了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.
| 归档时间: |
|
| 查看次数: |
5031 次 |
| 最近记录: |