简体   繁体   English

带有空队列的PHP中的AWS SQS错误检索消息

[英]AWS SQS error retrieving messages in PHP with empty queue

I have code that is similar to various examples on SQS. 我有类似于SQS上各种示例的代码。

$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;
}

However, I am getting an error in the foreach line: Warning: Invalid argument supplied for foreach() . 但是,我在foreach行中遇到错误: Warning: Invalid argument supplied for foreach() The response to receiveMessage has no Messages, which makes sense because the queue is empty. 对receiveMessage的响应没有消息,这是有道理的,因为队列为空。 Here is what print_r($messages) displays: 这是print_r($ messages)显示的内容:

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

In the foreach I have also tried $messages['Messages'] and $messages->get('Messages') , all with no luck. foreach我还尝试了$messages['Messages']$messages->get('Messages') ,但都没有运气。

I am running this on a system that is outside of AWS but uses the key/secret for auth. 我在AWS之外但使用密钥/秘密进行身份验证的系统上运行此代码。

Thanks! 谢谢!

You can also try: 您也可以尝试:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM