2017-07-17 10 views

回答

5

当在Amazon SQS队列上调用ReceiveMessage()时,将从队列中检索最多10条消息(可配置)。

这些邮件将被标记为隐形在线。这意味着消息仍在队列中,但不会通过另一个ReceiveMessage()呼叫返回。消息在一段时间内保持隐形。默认时间段在队列上配置(“默认可见性超时”)或检索邮件时(VisibilityTimeout)。

当应用程序处理完消息后,它应该调用DeleteMessage(),传递随消息提供的MessageHandle。该消息将从队列中删除

如果在消息被删除之前不可见时间到期,它将被再次放置在队列中并且应用程序可以再次检索它。因此,请务必将您的隐形超时设置为比应用程序通常处理邮件所用的时间更长。

它是可能,一个消息可以是检索不止一次从Amazon SQS更多。这很少见,但可能发生在有多个进程同时检索消息的地方。因此,SQS是“至少一次交付”。如果这是一个问题,您可以使用FIFO队列(在每个地区都不可用),这将保证每个消息只传送一次,但FIFO队列上存在吞吐量限制。

因此,如果您收到不止一次的消息:

  • 你应该检查你的隐形超时设置(包括默认设置,可当你调用ReceiveMessage()传递的值)
  • 考虑使用FIFO队列
  • 让您的应用程序检查消息是否已经在处理之前处理过(例如,通过唯一ID
+0

什么是隐身超时,我没有在AWS中看到这些选项,我还有一个问题是我如何一次又一次地收到同样的消息。在可见性超时之前 – user8316197

+0

我对*隐身超时*的引用与*可见性超时*相同(对于不一致的措辞感到抱歉)。它在控制台中显示为** Default Visibility Timeout **,代码显示为'VisibilityTimeout'。我的整个答案与你重复收到同样的信息有关,你可以尝试避免它。 –

+0

感谢您的详细解释 – user8316197

相关问题