我正在使用Amazom的aws-sdk-php-2 API从Amazon Simple Queue Service(Amazon SQS)接收消息。
我正在按照给定的教程:http://docs.aws.amazon.com/aws-sdk-php-2/guide/latest/service-sqs.html
我的问题是:如果我使用给定的代码,我会收到Message Body作为String(包含XML)。有没有办法将消息体作为一个对象获取,或者作为一个关联数组?
我意识到有一些方法可以将XML转换为PHP对象(想到SimpleXML),但它似乎是api的一个显而易见的特性,我无法想象它不提供它。但我在API(http://docs.aws.amazon.com/aws-sdk-php-2/latest/class-Aws.Sqs.SqsClient.html)
中找不到它我目前的代码:
<?php
use Aws\Sqs\SqsClient;
$client = SqsClient::factory(array(
'key' => '...',
'secret' => '...',
'region' => 'eu-west-1'
));
$queueUrl = 'https://sqs.eu-west-1.amazonaws.com/...';
$result = $client->receiveMessage(array(
'QueueUrl' => $queueUrl,
'MaxNumberOfMessages' => 3
));
foreach ($result->getPath('Messages/*/Body') as $messageBody) {
echo "<pre>";
echo htmlentities( print_r( $messageBody, true ) );
echo "</pre>";
}
// or alternatively
foreach( $result->get('Messages') as $message ){
echo "<pre>";
echo htmlentities( print_r( $message['Body'], true ) );
echo "</pre>";
echo "<hr />";
}
?>
答案 0 :(得分:3)
SQS系统并不关心正文中的内容,因为这是由您的应用程序定义的内容。
如果要通过SQS传递对象,则需要以某种格式对它们进行序列化。以下任何一个都可以工作:XML,JSON,PHP序列化(如果你需要在不使用php的系统中发送或接收消息,你可能不想使用这个选项)