AWS SQS Как разобрать сообщение - PullRequest
0 голосов
/ 30 июня 2019

Это код, который получает сообщение от события AWS S3 Bucket.

include_once('../aws/aws-autoloader.php');
include_once('AWSMsgQueueUserActivity.php');
include_once('AWSMsgQueueS3.php');


use Aws\Sqs\SqsClient;
use Aws\Exception\AwsException;
use Aws\Credentials\Credentials;

//$receive = new AWSMsgQueueUserActivity();
$receive = new AWSMsgQueueS3();

do
{
    //sleep(1);
    $result = $receive->getMessage();
   // print_r('\n');

    if (count($result->get('Messages')) > 0) {

        $msg = $result->get('Messages')[0];
        $decode_msg = json_decode($msg["Body"],true);
        var_dump($decode_msg);

        $receive->deleteMessage($result->get('Messages')[0]['ReceiptHandle']);
    }
 else{
     //echo "No Message In Queue\n";
 }

} while (true);

Это вывод переменной var_dump. Json_decode был передан в качестве второго параметра true, поэтому получил массив.

array(1) {
  ["Records"]=>
  array(1) {
    [0]=>
    array(9) {
      ["eventVersion"]=>
      string(3) "2.1"
      ["eventSource"]=>
      string(6) "aws:s3"
      ["awsRegion"]=>
      string(9) "us-east-1"
      ["eventTime"]=>
      string(24) "2019-06-30T18:26:49.428Z"
      ["eventName"]=>
      string(17) "ObjectCreated:Put"
      ["userIdentity"]=>
      array(1) {
        ["principalId"]=>
        string(13) "ANRN8QDWGH20Q"
      }
      ["requestParameters"]=>
      array(1) {
        ["sourceIPAddress"]=>
        string(13) "69.14.165.122"
      }
      ["responseElements"]=>
      array(2) {
        ["x-amz-request-id"]=>
        string(16) "21D1A6ADF98A39B0"
        ["x-amz-id-2"]=>
        string(76) "9G957u6trQA+Q6VjxwfZy6Q+0OKppD8vjwiPr8ESDXqnUXm4uaX76gsKF9rRsWEqjphcdOjjxTc="
      }
      ["s3"]=>
      array(4) {
        ["s3SchemaVersion"]=>
        string(3) "1.0"
        ["configurationId"]=>
        string(24) "shiftproviderbucketevent"
        ["bucket"]=>
        array(3) {
          ["name"]=>
          string(13) "shiftprovider"
          ["ownerIdentity"]=>
          array(1) {
            ["principalId"]=>
            string(13) "ANRN8QDWGH20Q"
          }
          ["arn"]=>
          string(26) "arn:aws:s3:::shiftprovider"
        }
        ["object"]=>
        array(4) {
          ["key"]=>
          string(16) "presignedurl.php"
          ["size"]=>
          int(774)
          ["eTag"]=>
          string(32) "21308bd245239e3a72bdd1c78c087f1a"
          ["sequencer"]=>
          string(18) "005D18FEE953EB0DD0"
        }
      }
    }
  }

Мой вопрос такой:

Каков наилучший подход к обработке этого массива, чтобы я мог легко получить доступ к элементам внутри. Я хочу иметь в качестве примера значение [ "Ключ"] => строка (16) "presignedurl.php"

и, как правило, легко получить доступ к другим элементам массива, не просматривая весь массив. Это возможно ? Любые рекомендации. Примеры были бы отличными. Заранее спасибо за помощь - я искал примеры и учебные пособия и не могу найти ничего полезного.

1 Ответ

0 голосов
/ 30 июня 2019

Я думаю, что приведенный ниже код должен проанализировать и вернуть желаемое значение ключа.

$decode_msg = json_decode($msg["Body"],true);
$object_key = $decode_msg['Records'][0]['s3']['object']['key'];
...