1

我有代码:

val messageRequest = new ReceiveMessageRequest().withQueueUrl(queueUrl).withVisibilityTimeout(8000).withMaxNumberOfMessages(10)
val messages = sqs.receiveMessage(messageRequest).getMessages.asScala

我的 lambda 最多可以工作 13 分 33 秒(它是 800 秒)

我一次从 SQS 接收 10 条消息

我想正确计算 VisibilityTimeout

我使用公式:

“lambda 超时”(800 秒)* MaxNumberOfMessages(10)= 8000 秒

每条消息 800 秒

1. 我是否正确计算了 VisibilityTimeout?

2. VisibilityTimeout 变化会影响计费吗?

4

1 回答 1

2

可见性超时是在消息传递给一个消费者后,SQS 将保持消息对任何消费者不可见的时间,等待该消费者处理和删除它。如果消息一旦传递,在允许的窗口内接收到它的消费者没有从队列中删除,那么当可见性超时到期时,它会再次变为可见并将再次传递。

在您描述的场景中,正确的值仍然是 800,因为可见性超时单独应用于每条消息,但同时开始并同时运行。您的代码将在 800 秒后终止,并且在该时间过后,消息需要再次变得可见。如果设置为 8000 秒,如果您的代码在 800 秒后终止,那么在超时到期之前,所有消息都将在 7200 秒内保持不可见。

可见性超时对计费没有直接影响。

于 2019-04-13T14:31:05.793 回答