【发布时间】:2013-09-05 03:51:49
【问题描述】:
我了解,为了带来巨大的可扩展性和可靠性,SQS 对资源进行了广泛的并行化。它甚至为小型队列使用冗余服务器,甚至发布到队列的消息也作为多个副本冗余存储。这些是阻止它像在 RabbitMQ 中那样只发送一次的因素。我什至看到了被删除的消息被传递。
对开发人员的影响是,他们需要为消息的多次传递做好准备。亚马逊声称这不是问题,但它确实是,然后开发人员必须使用一些同步结构,如数据库事务锁或发电机数据库条件写入。这两者都会降低可扩展性。
问题是,
鉴于重复传递问题,message-invisible-period 功能如何保持?不保证该消息是不可见的。如果开发人员必须自己安排同步,那么隐身期有什么好处。我已经看到消息被重新发送,即使它们应该是不可见的。
编辑
这里我包括一些参考资料
- What is a good practice to achieve the "Exactly-once delivery" behavior with Amazon SQS?
- http://aws.amazon.com/sqs/faqs/#How_many_times_will_I_receive_each_message
- http://aws.amazon.com/sqs/faqs/#How_does_Amazon_SQS_allow_multiple_readers_to_access_the_same_message_queue_without_losing_messages_or_processing_them_many_times
- http://aws.amazon.com/sqs/faqs/#Can_a_deleted_message_be_received_again
【问题讨论】:
-
我很好奇 - 我已经对 SQS 进行了大量工作,但从未见过这些问题。不确定是运气,还是我用它构建的应用程序和企业系统是否接收到相同的消息并不重要。你有关于这方面的文档的参考吗?
-
@PeterH.,我用参考更新了这个问题
-
尴尬 - 就在常见问题解答中!谢谢。适合我的 RTFM。
-
SQS 现在有 FIFO 队列,可以保证消息只传递一次。见docs.aws.amazon.com/AWSSimpleQueueService/latest/…
-
@danny,是的,曾经有几千人。对我来说,它看起来像一个爆裂的东西。一旦它开始重新交付,它会继续这样做几秒钟。我在我的日志中发现了这样的事件集群。我使用 dynamodb + 强一致性 + 条件写入来解决问题。
标签: amazon-web-services message-queue amazon-sqs