AWS SQS不遵守WaitTimeSeconds

Gra*_*eme 4 php amazon-sqs amazon-web-services

我正在使用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,
]
Run Code Online (Sandbox Code Playgroud)

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

谢谢

E.J*_*nan 9

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

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

'WaitTimeInSeconds'的目的是减少你需要在紧密循环中进行的调用次数,询问'你有没有给我任何消息',并且不断回头.