1 回の呼び出しでキューから最大 16 件のメッセージを受信します。
メッセージが受信されると、キューの VisibilityTimeout の期間中、メッセージは Inactive 状態になります。メッセージを処理した後、この期間内に削除してください。そうしない場合、メッセージは Active 状態に戻り、再配信が可能になります。
権限
デフォルトでは、Alibaba Cloud アカウント (root ユーザー) のみがこの操作を呼び出すことができます。RAM ユーザーがこの操作を呼び出す前に、必要な権限を付与してください。詳細については、「権限ポリシーと例」をご参照ください。
| プロパティ | 値 |
|---|---|
| API | BatchReceiveMessage |
| アクション | mns:BatchReceiveMessage |
| リソース | acs:mns:$region:$accountid:/queues/$queueName/messages |
仕組み
numOfMessagesパラメーターを指定してGETリクエストを送信し、キューからメッセージを受信します。返されたメッセージはすぐに Inactive 状態になり、他のコンシューマーからは非表示になります。
各メッセージを処理した後、
NextVisibleTimeになる前に、メッセージのReceiptHandleを使用して DeleteMessage を呼び出します。VisibilityTimeout期間内にメッセージを削除しない場合、メッセージは Active 状態に戻り、再度消費可能になります。
VisibilityTimeout は、CreateQueue を通じてキューレベルで設定されます。
リクエスト
リクエストライン
GET /queues/$queueName/messages?numOfMessages=16&waitseconds=10 HTTP/1.1URI パラメーター
| パラメーター | タイプ | 必須 | 例 | 説明 |
|---|---|---|---|---|
| numOfMessages | Integer | はい | 10 | 受信するメッセージの最大数。 |
| waitseconds | Integer | いいえ | 0 | ロングポーリングの待機時間 (秒単位)。利用可能なメッセージがない場合、メッセージが到着するか待機時間が経過するまでリクエストは保留されます。省略した場合、デフォルトでキューの PollingWaitSeconds が使用されます。「CreateQueue」をご参照ください。 |
ロングポーリングの動作
waitseconds が設定されている場合 (またはキューのデフォルトの PollingWaitSeconds が適用される場合)、メッセージが到着するか待機時間が経過するまでリクエストは保留されます。この期間中にキューに書き込まれたメッセージは、すぐに配信されます。2 つのポーリングモードの背景情報については、「ショートポーリングとロングポーリング」をご参照ください。
SMQ は、リクエスト数、待機時間、クライアント IP アドレスに基づいて、同時ロングポーリングリクエストを制限します。この制限を超えると、SMQ はリクエストを保持せず、すぐに 404 MessageNotExist を返します。不要な課金を避けるために、同時ロングポーリングリクエストを減らし、適切な待機時間を使用してください。制限を引き上げるには、してください。
リクエストヘッダー
この操作に固有のヘッダーはありません。
リクエストボディ
なし。
レスポンス
HTTP ステータスコード
HTTP/1.1 200 OKレスポンスヘッダー
この操作に固有のヘッダーはありません。
レスポンスボディ
レスポンスボディは XML 形式です。<Messages> 内の各 <Message> 要素には、次のフィールドが含まれます。
| パラメーター | タイプ | 例 | 説明 |
|---|---|---|---|
| MessageId | String | 5F290C926D472878-2-14D9529A8FA-20000\*\*\*\* | キュー内で一意のメッセージ識別子。 |
| ReceiptHandle | String | 1-ODU4OTkzNDU5My0xNDMyNzI3ODI3LTItOA== | メッセージが Inactive 状態の間、メッセージを削除または変更するためのハンドル。NextVisibleTime まで有効です。 |
| MessageBody | String | This is test message 1. | メッセージの内容。 |
| MessageBodyMD5 | String | C5DD56A39F5F7BB8B3337C6D11B6\*\*\*\* | メッセージボディの MD5 ハッシュ。 |
| EnqueueTime | Long | 1250700979248 | メッセージがキューに送信された時刻。UNIX タイムスタンプ (ミリ秒単位)。 |
| NextVisibleTime | Long | 1250700799348 | メッセージが再度可視になる時刻。UNIX タイムスタンプ (ミリ秒単位)。 |
| FirstDequeueTime | Long | 1250700779318 | メッセージが最初に消費された時刻。UNIX タイムスタンプ (ミリ秒単位)。 |
| DequeueCount | Integer | 1 | メッセージが消費された合計回数。 |
例
リクエスト例
GET /queues/$queueName/messages?numOfMessages=16 HTTP/1.1
Host: $AccountId.mns.cn-hangzhou.aliyuncs.com
Date: Wed, 28 May 2012 22:32:00 GMT
x-mns-version: 2015-06-06
Authorization: MNS 15B4D3461F177624206A:xQE0diMbLRepdf3YB+FIEXA****レスポンス例
HTTP/1.1 200 OK
Content-Type: text/xml;charset=utf-8
Content-Length: 500
x-mns-request-id: 512B2A634403E52B1956****
x-mns-version: 2015-06-06
<?xml version="1.0" encoding="UTF-8"?>
<Messages xmlns="http://mns.aliyuncs.com/doc/v1/">
<Message>
<MessageId>5F290C926D472878-2-14D9529A8FA-20000****</MessageId>
<ReceiptHandle>1-ODU4OTkzNDU5My0xNDMyNzI3ODI3LTItOA==</ReceiptHandle>
<MessageBodyMD5>C5DD56A39F5F7BB8B3337C6D11B6****</MessageBodyMD5>
<MessageBody>This is test message 1.</MessageBody>
<EnqueueTime>1250700979248</EnqueueTime>
<NextVisibleTime>1250700799348</NextVisibleTime>
<FirstDequeueTime>1250700779318</FirstDequeueTime>
<DequeueCount>1</DequeueCount>
<Priority>8</Priority>
</Message>
<Message>
<ReceiptHandle>1-ODU4OTkzNDU5My0xNDMyNzI3MjQwLTEtOA==</ReceiptHandle>
<MessageBodyMD5>C5DD56A39F5F7BB8B3337C6D11B6****</MessageBodyMD5>
<MessageBody>This is test message 2.</MessageBody>
<EnqueueTime>1250700979252</EnqueueTime>
<NextVisibleTime>1250700799350</NextVisibleTime>
<FirstDequeueTime>1250700779330</FirstDequeueTime>
<DequeueCount>1</DequeueCount>
<Priority>8</Priority>
</Message>
</Messages>エラーコード
| エラーコード | エラーメッセージ | HTTP ステータスコード | 説明 |
|---|---|---|---|
| QueueNotExist | The queue name you provided is not exist. | 404 | 指定されたキューは存在しません。まずキューを作成してください。 |
| MessageNotExist | Message not exist. | 404 | キューに可視メッセージがありません。これは、同時ロングポーリングの制限を超えた場合にも発生します。 |