Я использую 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?
Первая строка создает экземпляр SqsClient, а не создает очередь SQS. Вам все еще нужно вызвать $ queue-> createQueue. Смотрите документацию. Для очередей fifo вам нужно включить «FifoQueue» в «true» и настроить «ContentBasedDeduplication» при создании очереди. Когда вы отправляете ваше сообщение, в зависимости от параметра ContentBasedDeduplication созданной вами очереди, вам может потребоваться или не отправлять «MessageDeduplicationId» вместе с «MessageGroupId».
Из вашего кода я не вижу, как вы создали очередь.
Я сделал все это и настроил свою очередь с ContentBasedDeduplication, установленным в «false». Когда я отправляю сообщение, единственное другое свойство, которое я отправляю, которое вы не отправляете (вместе с MessageGroupId), — это MessageDeduplicationId. Я могу нормально отправлять сообщения в очередь fifo, используя SDK 3.44.
Похоже, что Amazon незаметно разрешил любую ошибку, блокировавшую мой вызов API. Я не изменил свои настройки очереди или мой код. Тот же вызов API, который привел к сообщениям об ошибках на прошлой неделе, теперь работает просто отлично.
Я столкнулся с этой проблемой на 3.3.0 навсегда. В моем случае мне просто нужно было обновить до 3.44.2, а затем передать MessageDeduplicationId в дополнение к MessageGroupId. Я бы, вероятно, дважды проверил вашу версию SDK, если вы столкнетесь с этой проблемой.