AWS SQS不遵守WaitTimeSeconds

时间:2016-09-13 13:44:51

标签: php amazon-web-services amazon-sqs

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

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

然而,客户端几乎立即返回,只有3-4条消息(现在队列中有+20条消息)。当只有4-5条消息时,它只返回一条消息。

我还将VisibilityTimeout设置为1秒,并且没有在循环中运行测试脚本,只是从CLI手动触发。

我传递给SqsClient receiveMessage的数组是:

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

为什么呼叫至少等待整整20秒(对于少量队列消息),并且没有返回多条消息(对于更完整的队列)的任何想法?

由于

1 个答案:

答案 0 :(得分:7)

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

WaitTimeInSeconds是它在没有消息的情况下返回之前等待的时间,但由于它在你的情况下正在查找消息,它会立即返回。

' WaitTimeInSeconds'是为了减少你需要在紧密循环中拨打的电话数量,询问你有没有给我发消息的信息。并不断回头。