2017-12-01 15 views
1

私はAmazon SDK for PHPバージョン3.44(2017-11-30リリース)を使用しています。 Amazon SQSアカウントに接続し、listQueues()、getQueueUrl()、getQueueAttributes()、およびreceiveMessage()コマンドを正常に実行できます。ただし、sendMessage()コマンドは常に次のメッセージで失敗します。aws-sdk-php v3.44がSQS FIFOキューにsendMessageを送信できません:MessageGroupIdがありませんか?

この要求には、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を通じてアマゾンSQS FIFOキューにメッセージを送信し、これが不可能であると信じ始めていますの作業例を探していくつかの時間を費やしています。誰もがaws-sdk-phpライブラリをSQS FIFOキューで動作させることができましたか?

+0

'$ message_group_id'に確実に入力されていますか?私の考えはおそらくnullはパラメータなしと解釈されますか? – mulquin

+0

はい、リテラルとスカラー変数を使用してMessageGroupIdの値を変更しました。 – hanmari

答えて

0

最初の行は、SQSキューの作成ではなく、SqsClientのインスタンスを作成しています。まだ$ queue-> createQueueを呼び出す必要があります。ドキュメントを参照してください。 FIFOキューの場合は、 "FifoQueue"を "true"に設定し、キューを作成するときに "ContentBasedDeduplication"を設定する必要があります。メッセージを送信するときには、作成したキューのContentBasedDeduplication設定に応じて、「MessageGroupId」とともに「MessageDeduplicationId」を送信する必要がある場合としない場合があります。

コードからは、キューの作成方法がわかりません。

  • は、あなたが "FifoQueue" =>
  • あなたは "ContentBasedDeduplication" を設定しました "真" を "true" または "false" プロパティでFIFOキューを使用可能にしましたか?
  • あなたのキューに拡張子「.fifo」を付けましたか?

私はこれらのすべてを行い、ContentBasedDeduplicationを「false」に設定してキューを構成しました。私がメッセージを送信するとき、あなたが(MessageGroupIdと一緒に)送信していない他のプロパティは、MessageDeduplicationIdだけです。私はsdk 3.44を使ってfifoキューにメッセージを送ることができます。

+0

SQS FIFOキューをプログラムで設定する方法について説明しました。 aws-sdk-php v3フレームワークを使用してそのキューにメッセージを送信できますか?これは、とりわけその問題に関するものです。 – hanmari

+0

はい。私はあなたの正確なバージョンを使用しています。 –

+0

Amazon SQSのWebインターフェイスからキューを手動で作成しました。私は、FIFOを使用するようにキューを設定し、ボックスをチェックしてContent Based Deduplicationを強制しました。キューをプログラムで作成しなかったのですが、上記のコードを使用してキューにメッセージを挿入できるはずです。しかし、私は一貫して、 "要求にはパラメータMessageGroupIdが含まれていなければなりません"というエラーメッセージが表示されます。投稿されたコードに間違いがありますか?あなたのsendMessage()関数を私のものと比較できるように、あなたの作業コードを例として投稿できますか? – hanmari

0

AmazonがAPIコールをブロックしていたバグを静かに解決したようです。キューの設定やコードを変更しませんでした。先週エラーメッセージが表示された同じAPI呼び出しがうまく動作します。

0

この問題は3.3.0で永久に発生しました。私の場合は、3.44.2にアップグレードした後、MessageGroupIdに加えてMessageDeduplicationIdを渡すだけでした。この問題が発生した場合は、SDKのバージョンを確認してください。

関連する問題