Vla*_*mir 13 amazon-sqs amazon-web-services
假设我有100个线程从相同的sqs读取 - 是否保证每条消息最多只能传送一次?是否可以不止一次地传递相同的消息?我找不到关于这个问题的任何明确的文件.小号
Ant*_*ace 28
2016年11月17日更新: 今天刚刚发布了具有保证一次交付的FIFO排队(此答案最初发布后差不多2年),SQS现在支持一次性交付.以下是详细信息:
MessageDeduplicationId作为队列消息的属性,并通过检查后的任一操作,防止在5分钟重复数据删除间隔中发送和接收重复消息MessageDeduplicationId.MessageDeduplicationId则将使用消息正文的SHA-256哈希自动生成(仅限内容,而不是属性).MessageDeduplicationIdon send 显式设置自己的任意值.否则SendMessage将失败并显示错误.在创建队列或更新队列属性时,可以启用基于内容的重复数据删除.
有关SendMessage和ReceiveMessage文档中的MessageDeduplicationId的更多详细信息.
2016年11月17日之后,这仍然适用于标准(非FIFO)队列:
由于SQS中标准(非FIFO)队列的分布式特性,保证"至少"一次.
来自FAQ:
问:我会收到多少次邮件?
Amazon SQS旨在为其队列中的所有消息提供"至少一次"传递.虽然大多数情况下每条消息只会传递给您的应用程序一次,但您应该设计系统,以便多次处理消息不会产生任何错误或不一致.
有关至少一次交货的更多信息:
Amazon SQS将您的消息副本存储在多个服务器上,以实现冗余和高可用性.在极少数情况下,当您收到或删除邮件时,其中一个存储邮件副本的服务器可能不可用.如果发生这种情况,则不会在该不可用的服务器上删除该邮件的副本,并且您可能会在收到邮件时再次收到该邮件副本.因此,您必须将应用程序设计为幂等的(即,如果它不止一次地处理相同的消息,则不得对其产生负面影响).
如果您确实需要保证应用程序中"最多一次"处理,您可能希望您的应用程序检查SQS消息的唯一标识符,而不是处理您之前处理或当前正在处理的消息ID.
| 归档时间: |
|
| 查看次数: |
7098 次 |
| 最近记录: |