php - AWS SQS 不遵守 WaitTimeSeconds

标签 php amazon-web-services amazon-sqs

<分区>

我在 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/

相关文章:

php - Mysql 按字段值限制行数

php - 如何在 mysql codeigniter 中将多个复选框值作为连续行插入

amazon-s3 - 将多个子域映射到同一个 S3 存储桶

amazon-sqs - 当 DLQ 尚不存在时,如何通过 Terraform 配置 SQS?

python-3.x - 如何在使用 Boto3 删除 SQS 消息时防止连接超时

PHP mysql 获取行代码以查找另一个表项中的变量值

javascript - 如何在php中实现多个复选框

amazon-web-services - dynamoDB 的 CloudFormation 模板无法工作 : One or more parameters were invalid

java - aws s3 withRegion : Cannot resolve method 'withRegion(com.amazonaws.regions.Regions)'

amazon-web-services - 无法在 S3 中配置 SQS 队列通知