2014-08-31 89 views
0

我有類似於SQS上各種示例的代碼。AWS SQS錯誤檢索PHP中帶有空隊列的消息

$sqs = \Aws\Sqs\SqsClient::factory(array(
    'key'=>'MYKEY', 
    'secret'=>'MYSECRET', 
    'region' => 'us-east-1' 
)); 
$queueURL = 'https://sqs.us-east-1.amazonaws.com/MYUSERID/MYQUEUENAME'; 


$messages = $sqs->receiveMessage(array('QueueUrl' => $queue)); 
print_r($messages);echo '<BR>'; 

foreach ($messages->getPath('Messages') as $message) { 
    // Do something with the message 
    echo $message; 
} 

但是,我收到了每條線的錯誤:Warning: Invalid argument supplied for foreach()。對receiveMessage的響應沒有消息,這是合理的,因爲隊列是空的。這裏是什麼的print_r($消息)顯示:

Guzzle\Service\Resource\Model Object ([structure:protected] => [data:protected] => Array ([ResponseMetadata] => Array ([RequestId] => 96a63acb-685c-5e42-a68b-76b7ea4ff16b))) 

foreach我自己也嘗試$messages['Messages']$messages->get('Messages'),都沒有運氣。

我在AWS以外的系統上運行此操作,但使用密鑰/祕密進行身份驗證。

謝謝!

+0

現在(至少)我已經加入'如果(isset($消息[ '消息'])!) 回聲 「沒有消息
」; 其他'在foreach前面。 – 2014-08-31 05:49:23

+0

這對我很有幫助。 http://docs.aws.amazon.com/aws-sdk-php/guide/latest/feature-models.html – 2014-08-31 16:25:41

回答

0

你還可以嘗試:

if ($messages->getPath('Messages')) { 
    foreach ($messages->getPath('Messages') as $message) { 
     echo "Received: ".$message['Body']; 
    } 
}