AWS SQS 不遵守 WaitTimeSeconds

AWS SQS not honouring WaitTimeSeconds

我在 PHP 中使用 AWS SDK 与 SQS 队列通信。目前队列中只包含简单的测试消息。我正在尝试从队列中读取接下来的 10 条消息。为此,我将 MaximumNumberOfMessages 设置为 10,并将 WaitTimeSeconds 设置为 20。

我对此的理解应该是,SqsClient 将连接并使用队列中的消息,直到它具有消息数 (10) 或达到超时 (20) 秒。

但是,客户端几乎是立即 returning,并且只有 3-4 条消息(现在队列中有 +20 条消息)。当只有 4-5 条消息时,它会 return 只有一条消息。

我还将 VisibilityTimeout 设置为 1 秒,而不是 运行 循环中的测试脚本,只是从 CLI 手动触发。

我传递给 SqsClient receiveMessage 的数组是:

[
        'QueueUrl' => $this->uri,
        'MaxNumberOfMessages' => 10,
        'VisibilityTimeout' => 1,
        'WaitTimeSeconds' => 20,
]

知道为什么调用没有等待至少 20 秒(对于少量队列消息),而不是 return发送多条消息(对于更满的队列)吗?

谢谢

我的理解(以及使用 SQS 时的观察)与您的不同。仅仅因为您将 MaxMessages 设置为 10,并不意味着您总是会得到 10,您最多会得到 10,但可能会更少。

WaitTimeInSeconds 是在 return 没有消息之前等待的时间,但由于它正在查找您的消息,因此它会立即 returning。

'WaitTimeInSeconds' 的目的是减少您需要在紧密循环中询问 'do you have any messages for me' 并不断返回 none.[=10 的呼叫次数=]