Amazon SQS API for PHP:如何获取消息正文作为对象


Amazon SQS API for PHP: How to get Message Body as Object?

我正在使用 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

我的问题是:如果我使用给定的代码,我将以字符串(包含 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 />";
}
?>

SQS 系统并不真正关心正文中的内容,因为这是由您的应用程序定义的内容。

如果要通过 SQS 传递对象,则需要以某种格式序列化它们。以下任何一种都可以工作:XML、JSON、PHP 序列化(如果您需要在不使用 PHP 的系统中发送或接收消息,您可能不想使用此选项)