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

Мне нужно реализовать отправку сообщений в SQS с атрибутами. Тело сообщения загружается нормально, но у меня проблема с атрибутами. Для атрибутов сообщения требуется ассоциативный массив с именем атрибута, типом данных и значением. Я получил такую ​​​​ошибку:

Ошибка HTTP AWS: ошибка клиента: 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 Elte156, на которую вы ссылаетесь, страница предназначена для SNS, а не для SQS. - person datashaman; 23.02.2021