Amazon SQS изпраща атрибути на съобщения в php

Трябва да внедря изпращане на съобщения до SQS с атрибути. Основният текст на съобщението се качва добре, но имам проблем с атрибутите. Атрибутите на съобщението изискват асоциативен масив с име на атрибута, тип данни и стойност. Получих този вид грешка:

AWS HTTP грешка: Грешка на клиента: 400 InvalidParameterValue (клиент): Заявката трябва да съдържа непразно име на атрибут на съобщението.

функцията за изпращане на съобщения:

public function uploadMessage(DataTransferObjectInterface $dataTransferObject)
{

    $command = $this->client->getCommand(
        'SendMessage',
        [
            'QueueUrl' => $this->queueUrl->value(),
            'MessageBody' => $dataTransferObject->getBody()->value(),
            'MessageAttributes' => $dataTransferObject->getAttributes(),

        ]
    );

    $this->client->execute($command);

}

функцията getAttributes() връща масив $attributes

& теста, при който изпълнявам кода

   $attributes = [
   'TestName' =>
            [
            'Name'=>'test',
            'DataType' => 'string',
            'Value' => 'string',

        ]
    ];
    $age = array("Peter" => "35", "Ben" => "9", "Joe" => "43");
    $json = json_encode($age);
    $body = Json::get($json);

    $dto = new DataTransferObject($attributes, $body);

    $uploader = new SQSManager($sqsClient, $queueUrl);
    $uploader->uploadMessage($dto);

Как трябва да изглежда масивът $attributes?


person MichalNicz    schedule 22.07.2015    source източник
comment
пробвал ли си с този формат от docs.aws.amazon.com/aws-sdk-php/v2/api/ ? Използвате ли и версия на вещица?   -  person Adam    schedule 22.07.2015
comment
Да, не работи. Използвам sdk 3.0 версия.   -  person MichalNicz    schedule 22.07.2015
comment
Имам същия проблем. Това изглежда или грешка в PHP SDK на AWS, или дефектна документация на MessageAttributes. Все още не съм намерил решение.   -  person Rob    schedule 23.07.2015


Отговори (1)


Корекция за тази грешка е вградена във версия 3.2.1 и по-нова.

Освен това масивът от атрибути на вашето съобщение не съответства на формата, показан в документацията. Вашите атрибути трябва да изглеждат така:

$attributes = [
    '<attribute name>' => [
        'DataType' => 'String',
        'StringValue' => '<attribute value>',
    ],
];
person giaour    schedule 23.07.2015
comment
Прав си. Неговият масив от съобщения е невалиден. Въпреки това използвам правилната нотация като във вашия отговор и грешката все още е същата: непразно име на атрибут на съобщението. - person Rob; 24.07.2015
comment
ААА разбирам. Във вчерашното издание излезе корекция и аз актуализирах отговора си. - person giaour; 24.07.2015
comment
Трябва да има пример като този в официалните документи; те са много объркващи. - person RonnyKnoxville; 02.02.2017
comment
Съгласен съм, че синтаксисът им е объркващ. Ето още един пример от техните документи - person Elte156; 27.03.2020
comment
@Elte156 вашата посочена страница е за SNS, а не за SQS. - person datashaman; 23.02.2021