我知道为了带来巨大的可扩展性和可靠性,SQS 对资源进行了广泛的并行化。它甚至为小型队列使用冗余服务器,甚至发布到队列的消息也作为多个副本冗余存储。这些是阻止它像在 RabbitMQ 中那样只发送一次的因素。我什至看到已删除的消息被传递。
对开发人员的影响是,他们需要为消息的多次传递做好准备。亚马逊声称这不是问题,但它确实是,然后开发人员必须使用一些同步构造,如数据库事务锁或发电机数据库条件写入。这两者都会降低可扩展性。
问题是,
针对重复投递问题,message-invisible-period特性如何成立?不保证该消息是不可见的。如果开发人员必须自己安排同步,那么隐身期有什么好处。我已经看到消息被重新传递,即使它们应该是不可见的。
编辑
在这里我包括一些参考
- 使用 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