This question already has answers here:
Amazon SQS Long Polling not returning all messages
(3个答案)
4年前关闭。
我正在PHP中使用AWS开发工具包与SQS队列进行通信。目前,队列中仅包含简单的测试消息。我正在尝试从队列中读取接下来的10条消息。为此,我将MaximumNumberOfMessages设置为10,并将WaitTimeSeconds设置为20。
我对此的理解应该是SqsClient将连接并使用队列中的消息,直到它具有消息数(10)或达到超时(20)秒为止。
但是,客户端几乎立即返回并且只有3-4条消息(现在队列中有+20条消息)。当只有4-5条消息时,它将仅返回一条消息。
我还将VisibilityTimeout设置为1秒,并且没有循环运行测试脚本,只是从CLI手动触发。
我传递给SqsClient receiveMessage的数组是:
有什么主意为什么调用至少要等待整整20秒(对于少量队列消息),并且不返回多于几个消息(对于更完整的队列)?
谢谢
(3个答案)
4年前关闭。
我正在PHP中使用AWS开发工具包与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秒(对于少量队列消息),并且不返回多于几个消息(对于更完整的队列)?
谢谢
最佳答案
我的理解(和使用SQS时的观察)与您的不同。仅仅因为您将MaxMessages设置为10,并不意味着您将始终获得10,最多将获得10,但是可能更少。
WaitTimeInSeconds是等待多长时间才能返回没有消息的消息,但是由于它正在根据您的情况查找消息,因此会立即返回。
“WaitTimeInSeconds”的目的是减少在紧密循环中询问“您是否有任何要发送给我的消息”的调用次数,并不断取回。
关于php - AWS SQS不遵守WaitTimeSeconds,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39471681/