使用亚马逊的SQS及其PHP SDK我收到消息并删除它们就好了但是如果没有收到消息我在尝试循环消息时会收到错误。如果有一种方法可以在我的foreach语句之前检查消息的数量,我会避免任何错误。显然我可以压制错误,一切都会顺利进行,但我不愿意。
$result = $sqs->receiveMessage(array(
'QueueUrl' => SQS_QUEUE,
'MaxNumberOfMessages' => 10 ));
foreach ($result->get('Messages') as $message) {
if (process_sqs($message['Body'])) {
$deletemessage = $sqs->deleteMessage(array(
'QueueUrl' => SQS_QUEUE,
'ReceiptHandle' => $message['ReceiptHandle']));
}
}
基本上在填充$ result之后我想查询收到的消息数,如果超过0则继续执行foreach语句。
我知道我可以在receiveMessage之前使用GetQueueAttributes来估计队列中的消息数量,但我认为不需要另外请求,而不保证我实际上会收到任何消息。
由于
答案 0 :(得分:1)
您可以使用PHP计算数组,然后使用count()函数循环它:
$messages = $result->get('Messages');
if (count($messages) > 0) {
foreach ...
}