AWS - Amazon / Technology · 2021年1月23日

SQS队列延迟那些事

由于各种”另类“的需求,有时候消息不能直接扔到Queue里去。

于是就有了下面这几个概念:

Message Timer

Visibility Timeout

Delay Queue

先从Delay Queue来说。

你可以理解为他是和正常Queue完全”不相关“的另一个Queue。

如果Delay Queue被启用的话,那么所有消息都要先在Delay Queue里停留规定的时间,才被移动到正常的Queue中,被consumer们看到。

所以启用了Delay Queue后,所有消息都要等。

默认0秒,最长15分钟。

Message Timer的意思其实就是某个消息的Invisibility定时器。有这样Timer的消息,在规定的时间不可见。你可以理解为它已经出现在正常的Queue中了,但是由于设置了Timer,所以不可见。

默认0秒,最长15分钟。

Visibility Timeout,注意这里是Timeout。

这里的时间是当一个消息被一个Consumer处理时,这个消息就在Queue不见了。

但其实它并没有消失,只是对其他Consumer不可见了。

如果这个Consumer能够执行完,那么它会把消息从Queue中删除掉。

如果这个Consumer不能在Timeout时间内执行完,那么相当于它被”还回到“Queue中,对其他Consumer可见。

这个Timeout默认是30秒,最长12小时。

都说到这儿了,一个问题就是,如果一直没人取,那么会在队列中停多久?

Retention Timeout,默认4天,区间1分钟到14天。