我正在使用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秒(对于少量队列消息),并且没有返回多条消息(对于更完整的队列)的任何想法?
由于
答案 0 :(得分:7)
我的理解(以及使用SQS时的观察结果)与您的不同。仅仅因为你已经将MaxMessages设置为10,并不意味着你总是得到10,你将得到10,但可能会更少。
WaitTimeInSeconds是它在没有消息的情况下返回之前等待的时间,但由于它在你的情况下正在查找消息,它会立即返回。
' WaitTimeInSeconds'是为了减少你需要在紧密循环中拨打的电话数量,询问你有没有给我发消息的信息。并不断回头。