获取Amazon SQS队列中的消息数

时间:2014-08-17 16:22:56

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

只是一个简单的问题,但我无法找到答案。

是否可以使用API​​来获取AWS SQS队列的队列大小(等待处理的消息/作业数)?

最好使用cURL或PHP SDK。

5 个答案:

答案 0 :(得分:3)

我相信你要找的是get-queue-attributes,也许是在询问ApproximateNumberOfMessages属性。

答案 1 :(得分:0)

您可以检索Attributes of the Queue并查找相关属性(请参阅此link)。您可能希望同时查看以下属性。

  

ApproximateNumberOfMessages - 返回可见的近似数字   队列中的消息

     

ApproximateNumberOfMessagesNotVisible - 返回尚未超时且未被删除的大致邮件数。

如果要包含等待添加的消息,您也可以考虑以下属性。

  

ApproximateNumberOfMessagesDelayed - 返回近似数字   等待添加到队列的消息。

最后对上述属性返回的值进行求和,得到当前队列的大小。

答案 2 :(得分:0)

使用PHP:

putenv('AWS_ACCESS_TOKEN=xxxx');
putenv('AWS_ACCESS_TOKEN_SECRET=xxxx'); 

$sqs = new \Aws\Sqs\SqsClient([
    'profile' => 'default',
    'region' => 'REGION',
    'version' => 'latest'
]);

$queueUrl = 'https://sqs.REGION.amazonaws.com/xxxxxxxx/queue-name';

$x = $sqs->getQueueAttributes([
    'QueueUrl' => $queueUrl, 
    'AttributeNames' => ['All']
]);

echo json_encode($x->toArray(), JSON_PRETTY_PRINT);

将输出类似:

{
    "Attributes": {
        "QueueArn": "arn:aws:sqs:REGION:xxxxxxx:queue-name",
        "ApproximateNumberOfMessages": "0",
        "ApproximateNumberOfMessagesNotVisible": "0",
        "ApproximateNumberOfMessagesDelayed": "0",
        "CreatedTimestamp": "1587472818",
        "LastModifiedTimestamp": "1587473783",
        "VisibilityTimeout": "30",
        "MaximumMessageSize": "262144",
        "MessageRetentionPeriod": "345600",
        "DelaySeconds": "0",
        "ReceiveMessageWaitTimeSeconds": "0",
        "KmsMasterKeyId": "alias\/aws\/sqs",
        "KmsDataKeyReusePeriodSeconds": "300",
        "FifoQueue": "true",
        "ContentBasedDeduplication": "false"
    },
    "@metadata": {
       ....
    }
}

答案 3 :(得分:0)

并提供一些代码示例:

aws sqs get-queue-attributes --queue-url https://sqs.<region>.amazonaws.com/<accountId>/<SQS name> --attribute-names All


{
    "Attributes": {
        "QueueArn": "arn:aws:sqs:<region>:<accountId>:<SQS name>",
        "ApproximateNumberOfMessages": "0",
        "ApproximateNumberOfMessagesNotVisible": "3",
        "ApproximateNumberOfMessagesDelayed": "0",
        "CreatedTimestamp": "1594729555",
        "LastModifiedTimestamp": "1595845586",
        "VisibilityTimeout": "60",
        "MaximumMessageSize": "262144",
        "MessageRetentionPeriod": "900",
        "DelaySeconds": "0",
        "RedrivePolicy": "{\"deadLetterTargetArn\":\"arn:aws:sqs:<region>:<accountId>:<DLQ name>\",\"maxReceiveCount\":3}",
        "ReceiveMessageWaitTimeSeconds": "0"
    }
}

获取已定义属性的值:

 aws sqs get-queue-attributes --queue-url https://sqs.<region>.amazonaws.com/<accountId>/<SQS name> --attribute-names VisibilityTimeout ApproximateNumberOfMessages ApproximateNumberOfMessagesNotVisible ApproximateNumberOfMessagesDelayed

{
    "Attributes": {
        "VisibilityTimeout": "60",
        "ApproximateNumberOfMessages": "0",
        "ApproximateNumberOfMessagesNotVisible": "3",
        "ApproximateNumberOfMessagesDelayed": "0"
    }
}

警告

直到生产者停止发送消息后至少一分钟,roximateNumberOfMessagesDelayed,roximateNumberOfMessagesNotVisible和roximateNumberOfMessagesVisible指标才能实现一致性。此时间是队列元数据达到最终一致性所必需的。

答案 4 :(得分:0)

对于PHP,试试这个,

        $sqsClient = new  SqsClient([
            'region' => env('AWS_REGION'),
            'version' => '2012-11-05',
            'credentials' => [
                'key'    => env('AWS_ACCESS_KEY'),
                'secret' => env('AWS_SECRET_KEY'),
            ],
        ]);

        $sqs = new SqsQueue($sqsClient,null,null);
        $size = $sqs->size(env('AWS_SQS_URL'));

        echo $size;