使用Amazon SQS实现"完全一次交付"行为的良好做法是什么?

Fil*_*ale 22 amazon-sqs

根据文件:

问:我会收到多少次邮件?

Amazon SQS旨在为其队列中的所有消息提供"至少一次"传递.虽然大多数情况下每条消息只会传递给您的应用程序一次,但您应该设计系统,以便多次处理消息不会产生任何错误或不一致.

有没有什么好的做法可以实现一次性交付?

我正在考虑使用DynamoDB "条件写入"作为分布式锁定机制但是......任何更好的主意?


一些参考这个主题:

Jef*_*eff 8

最佳解决方案实际上取决于您不会多次执行消息中建议的操作的严重程度.对于某些操作,例如删除文件或调整图像大小,如果它发生两次并不重要,所以什么也不做也没关系.当第二次不执行工作更为关键时,我为每条消息使用一个标识符(由发送方生成),接收方通过标记memchach中所示的ID来跟踪重复.许多事情很好,但如果生活或金钱取决于它,可能不会,特别是如果有多个消费者.

条件写入听起来像一个聪明的解决方案,但它让我想知道如果您需要一个完全一次的防弹解决方案,AWS是否对您的问题不是一个很好的解决方案.

  • +1我同意,Amazons对sqs的折衷将其降级为许多类型应用程序的消息传递解决方案.我希望他们能够提供他们自己的同步解决方案,作为一种可选行为,您可以以理解的性能成本启用,而不是我们所有人都必须通过相同的解决方法. (6认同)

Sam*_*ppe 8

现在可以使用FIFO队列并提供有序的,只需一次开箱即用.

https://aws.amazon.com/sqs/faqs/#fifo-queues

检查您所在地区的空房情况

  • 仅当所有各方(生产者、队列和消费者)都是单线程等等时,AWS FIFO 队列才提供一次。我建议阅读这篇文章以获取更多信息 - https://www.linkedin.com/pulse/truth-aws -sqs-fifo-哈林-曼/ (3认同)
  • FIFO 队列与 SNS 不兼容,因此如果您使用 SNS+SQS 的组合,则无法使用它。https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-subscribe-queue-sns-topic.html (2认同)