我知道为了实现广泛的可扩展性和可靠性,SQS需要进行大量的资源并行处理。即使是小队列,它也会使用冗余服务器,甚至将发布到队列中的消息存储为多个副本。这些因素防止了像RabbitMQ一样的精确一次性交付。我甚至见过已删除的消息被传送的情况。
对于开发人员来说,影响是他们需要准备好接收多个消息传递。亚马逊声称这不是问题,但如果是,则开发人员必须使用一些同步构造,例如数据库事务锁定或dynamo-db条件写入。这两者都会降低可扩展性。
问题是,在重复传递问题的情况下,消息不可见期功能如何实现?不能保证消息不可见。如果开发人员必须自己安排同步,那么不可见期的好处是什么?我甚至看到消息在应该不可见的情况下重新传递。
对于开发人员来说,影响是他们需要准备好接收多个消息传递。亚马逊声称这不是问题,但如果是,则开发人员必须使用一些同步构造,例如数据库事务锁定或dynamo-db条件写入。这两者都会降低可扩展性。
问题是,在重复传递问题的情况下,消息不可见期功能如何实现?不能保证消息不可见。如果开发人员必须自己安排同步,那么不可见期的好处是什么?我甚至看到消息在应该不可见的情况下重新传递。
- 如何使用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|Amazon SQS如何允许多个读者访问同一消息队列而不丢失或重复处理消息?
- http://aws.amazon.com/sqs/faqs/#Can_a_deleted_message_be_received_again|已删除的消息是否可以再次接收到?