我正在使用亚马逊SDK for PHP版本3.44(2017-11-30发布)。我可以连接到我的Amazon SQS帐户并执行listQueues(),getQueueUrl(),getQueueAttributes()和receiveMessage()命令。但是,sendMessage()命令始终失败,并显示以下消息:
请求必须包含参数MessageGroupId。
我绝对包含这个参数。我使用的aws-sdk-php API版本似乎无关紧要,这条消息不断回归。这是我的代码:
$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
我花了几个小时搜索通过PHP SDK将消息发送到Amazon SQS FIFO队列的工作示例,并开始相信这是不可能的。有没有人能够让aws-sdk-php库与SQS FIFO队列一起工作?
答案 0 :(得分:0)
第一行是创建SqsClient的实例,而不是创建SQS队列。您仍然需要调用$ queue-> createQueue。请参阅文档。对于fifo队列,您需要启用" FifoQueue" to" true",并设置" ContentBasedDeduplication"在创建队列时。发送邮件时,根据您创建的队列的ContentBasedDeduplication设置,您可能也可能不需要发送" MessageDeduplicationId"以及" MessageGroupId"。
从您的代码中,我无法看到您是如何创建队列的。
我做了所有这些事情,并将我的队列配置为ContentBasedDeduplication设置为" false"。当我发送邮件时,我发送给您的唯一其他属性(以及MessageGroupId)是MessageDeduplicationId。我可以使用sdk 3.44将消息发送到fifo队列。
答案 1 :(得分:0)
看起来亚马逊已经悄悄地解决了阻止我的API调用的任何错误。我没有更改队列设置或代码。上周导致错误消息的相同API调用现在运行正常。
答案 2 :(得分:0)
我在3.3.0上遇到了这个问题。在我的情况下,我只需要升级到3.44.2,然后传递MessageDeduplicationId和MessageGroupId。如果遇到这个问题,我可能会仔细检查您的SDK版本。