aws-sdk-php v3.44 не удается отправить сообщение в очередь FIFO SQS: MessageGroupId отсутствует?

Я использую Amazon SDK для PHP версии 3.44 (выпущен 2017-11-30). Я могу подключиться к своей учетной записи Amazon SQS и выполнить команды listQueues (), getQueueUrl (), getQueueAttributes () и receiveMessage (). Однако команда sendMessage () постоянно завершается ошибкой со следующим сообщением:

Запрос должен содержать параметр MessageGroupId.

Я определенно включаю этот параметр. Кажется, не имеет значения, какую версию API aws-sdk-php я использую, это сообщение постоянно возвращается. Вот мой код:

$queue = SqsClient::factory([
'profile'     => $profile,
'region'      => $region,
'version'     => '2012-11-05',
'credentials' => $credentials,
]);
$queue_list = $queue->listQueues(); // ok
$url        = $queue->getQueueUrl(['QueueName'=>$queue_name]); // ok
$received   = $queue->receiveMessage(['QueueUrl'=>$url->get('QueueUrl')]); // ok
$response   = $queue->sendMessage([
'MessageBody'    => $message,
'MessageGroupId' => $message_group_id,
'QueueUrl'       => $url->get('QueueUrl'),
]); // fails with message indicating MessageGroupId is missing

Я провел несколько часов в поисках рабочего примера отправки сообщения в очередь Amazon SQS FIFO через PHP SDK, и начинаю верить, что это невозможно. Кто-нибудь смог заставить библиотеку aws-sdk-php работать с очередью SQS FIFO?

1

Решение

Первая строка создает экземпляр SqsClient, а не создает очередь SQS. Вам все еще нужно вызвать $ queue-> createQueue. Смотрите документацию. Для очередей fifo вам нужно включить «FifoQueue» в «true» и настроить «ContentBasedDeduplication» при создании очереди. Когда вы отправляете ваше сообщение, в зависимости от параметра ContentBasedDeduplication созданной вами очереди, вам может потребоваться или не отправлять «MessageDeduplicationId» вместе с «MessageGroupId».

Из вашего кода я не вижу, как вы создали очередь.

  • Вы включили очереди fifo со свойством «FifoQueue» => «true»
  • Вы установили «ContentBasedDeduplication» в «true» или «false»?
  • Вы назвали свою очередь с расширением .fifo?

Я сделал все это и настроил свою очередь с ContentBasedDeduplication, установленным в «false». Когда я отправляю сообщение, единственное другое свойство, которое я отправляю, которое вы не отправляете (вместе с MessageGroupId), — это MessageDeduplicationId. Я могу нормально отправлять сообщения в очередь fifo, используя SDK 3.44.

0

Другие решения

Похоже, что Amazon незаметно разрешил любую ошибку, блокировавшую мой вызов API. Я не изменил свои настройки очереди или мой код. Тот же вызов API, который привел к сообщениям об ошибках на прошлой неделе, теперь работает просто отлично.

0

Я столкнулся с этой проблемой на 3.3.0 навсегда. В моем случае мне просто нужно было обновить до 3.44.2, а затем передать MessageDeduplicationId в дополнение к MessageGroupId. Я бы, вероятно, дважды проверил вашу версию SDK, если вы столкнетесь с этой проблемой.

0
По вопросам рекламы [email protected]