Я пытаюсь получить все сообщения в очереди, используя AWS PHP SDK
,
Раньше был get_queue_size()
метод, чтобы получить размер очереди, а затем я бы повторил цикл, чтобы получить все сообщения.
В новейшем SDK я не вижу такого метода. Ссылка на сайт
Может кто-нибудь сказать мне, как я могу получить все сообщения в очереди, используя последний SDK для PHP?
Вы можете получить все сообщения в очереди, вы просто не можете получить их все сразу. Вы запрашиваете сообщения и указываете максимум, который вы хотите максимум до 10 одновременно, более того, и вам нужно будет запрашивать другой набор сообщений, пока ваша очередь не станет пустой (и даже в этом случае вам нужно постоянно опрашивать SQS, если есть вероятность, что новые сообщения будут поступать в любое время).
Также важно помнить, что даже если у вас в очереди менее 10 сообщений и вы запрашиваете максимум 10 (и даже если в данный момент не выполняется опрос других клиентов), вы все равно можете не получить все сообщения в очереди на данный звонок — нужно опрашивать повторно.
Чтобы получить размер очереди, используйте Операция GetQueueAttributes:
$result = $client->getQueueAttributes(array(
'QueueUrl' => '{{QUEUE_URL}}',
'AttributeNames' => array('ApproximateNumberOfMessages'),
));
$queueSize = $result['Attribute']['ApproximateNumberOfMessages'];
Чтобы получать сообщения из очереди, используйте Операция ReceiveMessage. Другой ответ Э.Дж. Бреннан информативен относительно этого вопроса.