异常期间AWS SQS和可见性超时



我很想知道,如果应用程序在从sqs队列中取出消息后抛出异常,那么可见性超时是否受到尊重。

我的印象是它是被尊重的,所以如果在应用程序中抛出一个异常,比如验证失败,消息在被移动到DLQ之前保持在队列中?

正确吗?

当您的应用程序调用ReceiveMessage()时,返回一条消息,并且该消息在队列中"不可见"。当应用程序处理完消息后,它应该调用DeleteMessage()从队列中删除消息。

如果没有在不可见超时时间段内完成,则消息将"重新出现"在队列中,以便可以重新处理。这意味着,如果您的应用程序抛出异常并且没有完成对消息的处理,则该消息将被重新处理。

但是,如果这种情况发生多次,则消息将被移动到死信队列。这可以防止消息不断被处理失败的情况。在配置SQS Queue时,可以配置将消息发送到死信队列之前的重试次数。

Amazon SQS需要超时,因为这是它知道处理失败的方式。它无法洞察实际的应用程序故障——它只能假定,因为超时时间已经过去了。为了"更快"的响应,你可以使用一个非常小的超时时间,然后让你的应用程序以频繁的间隔向SQS发送一个"心跳"信号,告诉它消息仍在处理中,因此重置不可见超时时间。

最新更新