2017-02-04 115 views
1

消费者正在队列中侦听(FIFO或标准队列),生产者在队列上产生消息。Amazon SQS如何在这种情况下工作?

  1. Amazon SQS队列从消费者获得确认后是否会自动从队列中删除消息?有没有一种方式/配置队列保持消息,而不是删除它,并确保它不会再次交付。

  2. 生产者在队列上产生消息。由于网络问题,消费者变为离线。过了一段时间他/她回到网上。当他上网时,队列会将消息 传递给消费者吗?由于队列没有收到消费者的ACK,我认为是。

回答

1

我相信你是从rabbitmq的角度问的。有一些差异。没有ack平方。消息不会自动删除,即使消费者接受消息,消息也会保持在队列中。消费者在完成处理之后需要明确地删除消息。

平方不打扰消费者的在线离线状态。消费者定期调查新项目的平方。如果有消息可用,它将被分发。消费者完成后,它会调用sqs来删除该消息。然后再次轮询新消息。

在您的方案中,消费者完成消息处理后,可以发出两个请求:一个将消息排入不同的队列,另一个将消息从原始队列中删除。

如果您有多个消费者列在同一队列中,那么消息隐藏期的概念即将发挥作用。如果你有这样的设置,请在评论中提问,我会更新更多的信息。

希望它有帮助。

+0

你说'消费者定期调查SQS的新项目'消费者是否可以在队列上侦听,然后队列可以推送给客户端而不是消费者拉动它?由于拉模式不适用于高度可扩展的应用程序。 – user3198603

+1

@ user3198603在这个评论和你原来的问题之间,它听起来不像你实际上已经阅读过文档。通过长轮询HTTP/S连接将消息推送给消费者......正如[SQS常见问题解答](https://aws.amazon.com/sqs/faqs/)中所述。 –

+0

@ user3198603,如果没有合适的基础,可伸缩性受拉的想法是错误的。只有当很多员工在很短的时间内碰到一台服务器时,它才会受到影响。使用sqs,这两个因素被这样消除(1)没有一台服务器,而是一组服务器。命中分布(2)你没有高频率击中。通过长轮询机制降低频率。 – inquisitive