ラベル sqs の投稿を表示しています。 すべての投稿を表示
ラベル sqs の投稿を表示しています。 すべての投稿を表示

2014年1月16日木曜日

SQSってなんじゃ?(supervisordでSQS)

いまさらですが、SQS+supervisordです。

supervisorはプログラムの起動監視と、自動起動/復帰などを行ってくれるツールです。
これをつかってSQSの受信処理プログラムをワーカーとして管理してみます。


受信テスト用のスクリプトを作成


メッセージの受信は、一度に最大の10件まで、ポーリング20秒で受信したメッセージをログファイルに出力するようにします。
また、今回はログの出力タイミングがわかりやすいように、1回のポーリング後10秒間sleepしています。
$ vim /home/ec2-user/svsqs.rb
#!/usr/local/bin/ruby

require 'aws-sdk'
require 'logger'

access_key = 'XXXXXXXXXXXXXXXX'
secret_key = 'YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY'
queue_url = 'https://sqs.ap-northeast-1.amazonaws.com/ZZZZZZZZZZZ/svsqs'

log = Logger.new("/home/ec2-user/test.log");

AWS.config(:access_key_id => access_key,
  :secret_access_key => secret_key,
  :region => "ap-northeast-1")
sqs = AWS::SQS.new

while true
  messages = sqs.queues[queue_url].receive_message({:limit => 10, :wait_time_seconds => 20}).map do |m|
    json = JSON.parse(m.body)
    log.debug("#{$$} #{json['msg']}")
    m.delete()
  end
  log.debug("#{$$} -------")
  sleep 10
end
$ chmod 755 /home/ec2-user/svsqs.rb



supervisorのインストールと設定


次に、supervisorをインストールして、上記のスクリプトの起動管理するように設定します。
# easy_install supervisor
# vim /etc/init.d/supervisord

次にsupervisor自体の起動スクリプトをつくってサービス登録します。
#!/bin/sh
#
# /etc/rc.d/init.d/supervisord
#
# Supervisor is a client/server system that
# allows its users to monitor and control a
# number of processes on UNIX-like operating
# systems.
#
# chkconfig: - 64 36
# description: Supervisor Server
# processname: supervisord

# Source init functions
. /etc/init.d/functions

RETVAL=0
prog="supervisord"
pidfile="/tmp/supervisord.pid"
lockfile="/var/lock/subsys/supervisord"

start()
{
   echo -n $"Starting $prog: "
   daemon --pidfile $pidfile supervisord
   RETVAL=$?
   echo
   [ $RETVAL -eq 0 ] && touch ${lockfile}
}
stop()
{
   echo -n $"Shutting down $prog: "
   killproc -p ${pidfile} /usr/bin/supervisord
   RETVAL=$?
   echo
   if [ $RETVAL -eq 0 ] ; then
      rm -f ${lockfile} ${pidfile}
   fi
}
case "$1" in
  start)
    start
  ;;
  stop)
    stop
  ;;
  status)
    status $prog
  ;;
  restart)
    stop
    start
  ;;
  *)
    echo "Usage: $0 {start|stop|restart|status}"
  ;;
esac


# chmod 755 /etc/init.d/supervisord
# chkconfig --add supervisord
# chkconfig supervisord on
# chkconfig --list



監視対象プロセスの設定


子設定ファイルの読込み設定

主設定ファイルの末尾に、アプリケーションごとの設定ファイルをインクルードするように設定しておきます。
# echo_supervisord_conf > /etc/supervisord.conf
# echo "[include]" >> /etc/supervisord.conf
# echo "files = supervisord/conf/*.conf" >> /etc/supervisord.conf

子設定ファイルの作成

svsqsという名前で最初に書いたスクリプトの起動設定をします。 自動起動や、自動復帰をONにします。
# mkdir -p  /etc/supervisord/conf/
# vim /etc/supervisord/conf/svtest.conf
[program:svsqs]
command = /home/ec2-user/svsqs.rb
process_name = svsqs
autostart   = true
autorestart = true



supervisorのデーモン起動


ここまで設定できたらsupervisord自体を起動します。
# service supervisord start



supervisorのコンソールでstop/startテスト


supervisorctlというコマンドで管理対象プロセスの操作や状態確認が簡単にできます。
 supervisorが起動すると、autostartがONになっているため対象のスクリプトも起動していることが分かります。
# supervisorctl
svtest                           RUNNING    pid 18770, uptime 15:44:07
supervisor> stop svtest
svtest: stopped
supervisor> status
svtest                           STOPPED    Jan 16 05:12 AM
supervisor> start svtest
svtest: started
supervisor>
supervisor>
supervisor> status
svtest                           RUNNING    pid 10876, uptime 0:00:03
supervisor>
supervisor>
supervisor> exit



自動復帰の確認


プロセスを強制的に落としてみます。
するとsupervisorにより、新しいプロセスとして自動復帰します。
# ps -ax | grep svtest
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
10876 ?        S      0:00 /bin/sh /home/ec2-user/svsqs.rb
10892 pts/0    D+     0:00 grep svtest

# kill -9 10876
# ps -ax | grep svtest
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
10898 ?        S      0:00 /bin/sh /home/ec2-user/svsqs.rb
10901 pts/0    S+     0:00 grep svtest



メッセージの確認


このプログラムで扱うSQSのキューに対し、いくつかメッセージを送ってみると、受信できているのがわかります。
# tail -1000f test.log
D, [2014-01-16T07:02:28.085909 #13119] DEBUG -- : 10898 aaaaaa
D, [2014-01-16T07:02:28.176748 #13119] DEBUG -- : 10898 -------
D, [2014-01-16T07:02:38.347694 #13119] DEBUG -- : 10898 bbbbbbb
D, [2014-01-16T07:02:38.364416 #13119] DEBUG -- : 10898 cccccccc
D, [2014-01-16T07:02:38.414742 #13119] DEBUG -- : 10898 ddddddd
D, [2014-01-16T07:02:38.466001 #13119] DEBUG -- : 10898 -------
D, [2014-01-16T07:02:48.655003 #13119] DEBUG -- : 10898 eeeeeee
D, [2014-01-16T07:02:48.666323 #13119] DEBUG -- : 10898 ffffffff
D, [2014-01-16T07:02:48.718459 #13119] DEBUG -- : 10898 gggggggg
D, [2014-01-16T07:02:48.771584 #13119] DEBUG -- : 10898 -------
D, [2014-01-16T07:02:58.947327 #13119] DEBUG -- : 10898 hhhhhhhh
D, [2014-01-16T07:02:58.957724 #13119] DEBUG -- : 10898 iiiiiii
D, [2014-01-16T07:02:59.023820 #13119] DEBUG -- : 10898 -------
D, [2014-01-16T07:03:09.171886 #13119] DEBUG -- : 10898 jjjjjjj



複数プロセス


次に、このプログラムを並列で複数のワーカーとして起動管理するようにしてみます。
# vim /etc/supervisord/conf/svsqs.conf

複数のプロセスとして管理するには、numprocsというパラメータを2以上に設定します。
また、このときprocess_nameにはワーカーの番号を含める必要があるため、
supervisorの特殊変数 %(program_name)%(process_num)を利用します。
[program:svsqs]
command = /home/ec2-user/svsqs.rb
process_name = %(program_name)s_%(process_num)02d
numprocs = 2
autostart   = true
autorestart = true

設定を変えたので再起動し、プロセスを見てみると、2つ起動しているのが分かります。
# /etc/init.d/supervisord restart

supervisorctlでは、先ほど設定した名前でワーカー名が動的に付与されているのが分かります。
[root@ip-10-160-79-47 ec2-user]# supervisorctl
svsqs:svsqs_00                   RUNNING    pid 14286, uptime 0:36:24
svsqs:svsqs_01                   RUNNING    pid 14287, uptime 0:36:24

プロセスを落としてみると、自動で2プロセスにもどります。
#
# ps -ax | grep rb
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
14286 ?        Sl     0:00 /usr/local/bin/ruby /home/ec2-user/svsqs.rb
14287 ?        Sl     0:00 /usr/local/bin/ruby /home/ec2-user/svsqs.rb
14516 pts/0    S+     0:00 grep rb
#
# kill -9 14286
#
# ps -ax | grep rb
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
14287 ?        Sl     0:00 /usr/local/bin/ruby /home/ec2-user/svsqs.rb
14526 ?        Rl     0:00 /usr/local/bin/ruby /home/ec2-user/svsqs.rb

また、ログをみてみると、2つのプロセスできちんと動作しているようです。
# tail -1000f test.log
D, [2014-01-16T07:25:13.175073 #14287] DEBUG -- : 14287 -------
D, [2014-01-16T07:25:23.311352 #14286] DEBUG -- : 14286 aaaaaaaa
D, [2014-01-16T07:25:23.326240 #14286] DEBUG -- : 14286 bbbbbbbb
D, [2014-01-16T07:25:23.393122 #14286] DEBUG -- : 14286 ccccccc
D, [2014-01-16T07:25:23.441076 #14286] DEBUG -- : 14286 -------
D, [2014-01-16T07:25:28.144026 #14287] DEBUG -- : 14287 ddddddd
D, [2014-01-16T07:25:28.153058 #14287] DEBUG -- : 14287 -------
D, [2014-01-16T07:25:33.682118 #14286] DEBUG -- : 14286 eeeeeee
D, [2014-01-16T07:25:33.735474 #14286] DEBUG -- : 14286 fffffff
D, [2014-01-16T07:25:33.827446 #14286] DEBUG -- : 14286 -------
D, [2014-01-16T07:25:42.971976 #14287] DEBUG -- : 14287 ggggggg
D, [2014-01-16T07:25:42.986925 #14287] DEBUG -- : 14287 -------
D, [2014-01-16T07:25:44.555526 #14286] DEBUG -- : 14286 hhhhhhh
D, [2014-01-16T07:25:44.606725 #14286] DEBUG -- : 14286 -------
D, [2014-01-16T07:25:53.106090 #14287] DEBUG -- : 14287 jjjjjjjj
D, [2014-01-16T07:25:53.118289 #14287] DEBUG -- : 14287 -------
D, [2014-01-16T07:26:01.609948 #14286] DEBUG -- : 14286 kkkkkkkk
D, [2014-01-16T07:26:01.738742 #14286] DEBUG -- : 14286 -------
D, [2014-01-16T07:26:04.564231 #14287] DEBUG -- : 14287 llllllll
D, [2014-01-16T07:26:28.385778 #14287] DEBUG -- : 14287 -------
D, [2014-01-16T07:26:34.210485 #14526] DEBUG -- : 14526 mmmmm
D, [2014-01-16T07:26:34.301180 #14526] DEBUG -- : 14526 -------
D, [2014-01-16T07:26:39.204945 #14287] DEBUG -- : 14287 nnnnn
D, [2014-01-16T07:26:39.224593 #14287] DEBUG -- : 14287 -------

こんな感じで、仮にプログラムがエラーでオチたりした場合でも、常に指定したプロセス数に起動しなおしてくれると助かります。

以上です。


2011年10月21日金曜日

SQSってなんじゃ?(遅延送信、一括送信機能が追加)


SQSに新機能が登場しました。今回追加されたのは、大きく分けて

  • メッセージの一括送信、削除
  • キューとメッセージの遅延送信

の2つです。

さっそく試してみましょう


キューとメッセージの遅延送信

遅延送信機能はコンソールから確認できるので、コンソールを見てみます。
まずはキューの遅延送信設定を確認してみます。
コンソールのSQSから「Create New Queue」ボタンでキューを作成します。

すると、下記のキュー設定ダイアログが表示されます。
赤枠の部分に「Delivery Delay」があり、ここで最大15分まで遅延時間を設定できます。
たとえばここで遅延時間を45秒に設定すると、このキューで送信したメッセージはデフォルトで送信後45秒後から受信可能になります。



次に、そのキューで「SendMessage」してみると、メッセージ送信ダイアログが表示されます。
赤枠のとおり、メッセージでも個別に遅延時間を設定できます。
デフォルトでは、キューで設定した遅延時間がセットされています。なにもせずに送信すると、キューの遅延設定時間で遅延し、ここで別の時間にセットすると、その時間だけ遅延します。

ここでは3分に設定して、メッセージ送信してみます。




ここで、「Queue Action」から「View/Delete Messages」を選び、キューのメッセージ一覧ダイアログが表示され、「Start Polling Messages」を数回押してみますが、しばらくは(3分以内)メッセージが受信されません。




3分経過すると、先程のメッセージが受信されます。メッセージ情報のSentとFirst Receivedの間が3分以上あいているのが確認できます。




また、メッセージダイアログで何も設定せずに送信すると、キューで設定した45秒間は受信できず、45秒経過後に受信されるようになります。



このようなメッセージの遅延は、仕様やアプリケーションの他の処理との兼ね合いなどで必要になるシーンがあるので、バッチなどのバックエンド処理には重宝しそうです。



メッセージの一括送信、削除



APIにSendMessageBatchDeleteMessageBatchという関数が用意されました。メッセージの送信、削除を同時に10メッセージまで操作できるようです。ただし、通常のSendMessageなどは1つのメッセージ容量が65KBまででしたが、この一括送信では10個で65KBまでという制限があるようです。
この機能の利点は、10個までのメッセージの操作を1リクエストで行えるため、リクエストごとの課金を抑えることができます。


現時点(2011/10/21 18:00)では、メッセージの一括送信、削除の機能は、APIまでの対応でSDKではまだ未サポートのようです。

SQSのAPIリファレンス
http://docs.amazonwebservices.com/AWSSimpleQueueService/latest/APIReference/

こちらはSDKがサポートされたらまた報告したいと思います。


以上です。




2011年10月7日金曜日

SQSってなんじゃ?(AWSコンソールにSQS登場)

SQSがAWSコンソールで利用可能になりました。 いままでキューに入ったメッセージを確認する手段がプログラム経由だったので、管理がしづらかったのですが、これでメッセージの状態がわかりやすくなると思います。 AWSコンソールを開くと、まずSQSのタブが増えていることに気づきます。
SQSタブをクリックすると、SQSのキュー一覧画面が表示され、いままで作ったキューが表示されているのがわかります。




まずはキューの作成をしてみます。



「Create New Queue」ボタンをクリックします。
すると、キュー作成のダイアログが開きます。


ここで、
  • Queue Name:キュー名
  • Default Visibility Timeout:読み込み後、他のクライアントから秘匿する秒数のデフォルト値、メッセージ送信時に指定しないとこれが使用される
  • Message Retention Period:メッセージの保持期間
  • Maximam Message Size:メッセージの最大サイズ
を指定して、「Create Queue」ボタンをクリックします。
すると、キュー一覧画面にもどり、キューのメッセージ数が1つ増えているのがわかります。


キューのメッセージを確認するには、キューを選択して、「Queue Action」から「View/Delete Messages」を選択します。
すると、メッセージ詳細ダイアログが立ち上がります。



「Start Polling Messages」を押すと、メッセージのフェッチが始まります。下のプログレスバーが終了すると全てのメッセージがチェックされ、一覧に表示されます。またフェッチを途中で中止した場合は右上の「Stop Now」を押します。
メッセージの詳細を見たい場合は、メッセージの「 More Details」を押すとメッセージ全文と付帯情報を確認できます。



キューの一覧にもどり、下部ペインの「Permission」タブで、各キューのパーミッションを設定できます。


ここでは各アクションごとに細かく権限ポリシーを設定でき、また「Edit Policy Document」ボタンでポリシーファイルのJSON的な書き方でも設定が可能です。

いままでプログラムで送信したキューの状態を知るにはそのプログラムを書かないといけないため、なんとなくブラックボックスになりがちだったSQSですが、このように、可視化されることでSQSがぐっと身近に感じられるようになり、管理も簡単になりました。とても助かります。

本日はここまで。

2011年6月22日水曜日

Amazon SQSってなんじゃ?(その2 PHP SDK編)

前回、SQSをscratchpadから使用してみましたが、今回はPHPから利用してみます。

送信側

まずメッセージの送信側は以下のような流れになります。
  1. 指定したキュー名のキューオブジェクトを作る
  2. メッセージを送る

では早速コードを書いてみます。SDKのダウンロードと配置はSimpleDBの回と同様なので割愛します。

send_message.php
<?php

//ダウンロードしたSDKディレクトリのsdl.class.phpをロードします。
require_once('../../../sdk/sdk.class.php');
//アクセス用のキーを定義します。
$access_key = 'xxxxxxxxxxxxxx';
$secret_key = 'xxxxxxxxxxxxxxxxxxxxxxxx';
//キーをもとにSDKのSQSアクセサクラスを初期化します。
$sqs = new AmazonSQS($access_key, $secret_key);
//キュー名を定義します。
$queueName = 'moge';
//キュー名からキューURLを取得します。
$queueURL = $sqs->create_queue($queueName)->body->CreateQueueResult->QueueUrl;
//キューURLを指定してメッセージを送ります。
$data = $sqs->send_message($queueURL, 'mamimumemo');

//戻り値から成否を判断します。
if($data->isOK()){
  print_r('成功〜');
}
else{
  print_r('失敗〜');
}
?>
たったこれだけです。SimpleDBのときよりはるかにシンプルです。簡単。


受信側

次に受信側です。受信側の流れは以下が一般的です。
  1. 指定したキュー名のキューオブジェクトを作る
  2. メッセージの待機
  3. メッセージを受け取ったら処理
  4. メッセージを削除

受信側は送信側とくらべてやや特殊です。
なぜなら受信側はメッセージを待機し続ける必要があるため、メモリに常駐したワーカープロセスである場合がほとんどです。また、待機のためのポーリングなども必要です。

受信側のコードは以下のような形になります。
recieve_message.php
#!/usr/bin/php
<?php
//ダウンロードしたSDKディレクトリのsdl.class.phpをロードします。
require_once('../../../sdk/sdk.class.php');
//アクセス用のキーを定義します。
$access_key = 'xxxxxxxxxxxxxx';
$secret_key = 'xxxxxxxxxxxxxxxxxxxxxxxxxx';
//キーをもとにSDKのSQSアクセサクラスを初期化します。
$sqs = new AmazonSQS($access_key, $secret_key);
//送信側と同じキュー名を定義します。
$queueName = 'moge';
//キュー名からキューURLを取得します。
$queueURL = $sqs->create_queue($queueName)->body->CreateQueueResult->QueueUrl;

//メッセージを待機します
while(true){
 //メッセージの取得を試みます。
  $data = $sqs->receive_message($queueURL);
 //正常受信
  if($data->isOK()){
   //メッセージがあったら処理  
    if(isset($data->body->ReceiveMessageResult->Message)){
     //メッセージを取り出します。
      $msgdata = $data->body->ReceiveMessageResult->Message;
      $msg = $msgdata->Body;
     /*
      *ここで何か処理を行います。
      */
     
     //削除用のポインタを取得します。
      $handle = (string)$msgdata->ReceiptHandle;
     //メッセージを削除します。
      $sqs->delete_message($queueURL, $handle);
      print_r($msg . "\n");
    }
   //メッセージがなければ1秒待機します。
    else{
      sleep(1);
    }
  }
 //受信異常
  else{
   //エラーを出力します。
    print_r($data->body->Error->Message . "\n");
  }
}
exit(0);
?>
このPHPのコードはワーカプロセスにするため、コマンドラインからスクリプト起動します。
$ php recieve_message.php

このようにSQSはとてもシンプルなサービスですが、SimpleDBなどのほかのサービスとあわせて利用することでいろいろな用途に使え、とても便利です。

Amazon SQSってなんじゃ?(その1 Scratchpad編)

SimpleDBの回は途中で一休みして、SQSでも遊んでみました。
Amazon SQS(Simple Queue Service)は、AWSが提供するメッセージキューシステムです。
メッセージキューは、送信側と受信側が別のプロセスで非同期にメッセージのやりとりを行い、送信と受信の間でお互いの処理待ちをなくすことのできる仕組みをもっています。
これはたとえばWEBアプリケーションなどで、画像生成などの重い処理をするときに処理のタスクだけを指示して、レスポンスをすぐ返すことによりクライアントに処理待機をさせないようにするときなどに有用です。

SQSではメッセージの送信、受信側での処理は以下のような流れになります。
使い方はとてもシンプルで、送信側でメッセージを送り、受信側でメッセージの受信を待機するだけです。

送信側
  1. 指定したキュー名のキューオブジェクトを作る
  2. メッセージを送る

受信側
  1. 指定したキュー名のキューオブジェクトを作る
  2. メッセージの待機
  3. メッセージを受け取ったら処理
  4. メッセージを削除

さっそく利用してみます。
まずSQSのページで利用申し込みします。

申し込むと登録完了メールが届いて、すぐつかえるようになります。

このSQSにもscratchpadというJavascriptで書かれたツールがあるので、使用してみます。
Javascript Scratchpad for Amazon SQSをダウンロードし、解凍したフォルダのindex.htmlをブラウザで開きます。

ヘッダにアクセスキーとシークレットアクセスキーを入力して、右側のリストから仕様したいAPIを選びます。

キューの作成

まず送信側の処理に必要なキューの作成をします。右側のAPIリストから"CreateQueue"を選択します。


パラメータは以下のとおりです。
  • QueueName(必須):キュー名。SQSではキューはラジオのチャンネルのようなもので自分が使用するSQSインスタンスの中でユニークである必要があります。あるキュー名を指定するといつでも同じキューが取得でき、同じキューに対してメッセージの送受信を行います。
  • Default Visibility Timeout(オプション):受信側クライアントのインスタンスが複数ある場合、1つのインスタンスがメッセージを受信するとここで指定した時間(秒)の間は、他のインスタンスからは隠されます。それによってその間重複することなく受信処理を完了することができます。デフォルトは30秒で、非常に重い処理をする場合はこの秒数を多くします。

ここではQueueNameに"hoge"と入力し、Invoke Requestを押します。
すると、以下のようなレスポンスが返ります。
<CreateQueueResponse>
  <CreateQueueResult>
    <QueueUrl>https://queue.amazonaws.com/821635308497/hoge</QueueUrl>
      </CreateQueueResult>
    <ResponseMetadata>
    <RequestId>e490c631-b519-4e02-a610-55ab66b2fac2</RequestId>
  </ResponseMetadata>
</CreateQueueResponse>
ここでQueueURLというのが"hoge"というキューにアクセスするための識別子になります。このURLはキュー名に対し一意なもので、送信するときも受信するときにもこのURLを指定してメッセージのやりとりを行います。CreateQueueを何度行ってもキュー名が同じならばURLは同じものになります。つまりCreateQueueというのはキューをいくつもつくるのではなく、与えたキュー名から一意なキューURLを取得する処理だといえます。これは76.1MHzにあわせれば毎回interfmにつながるのと同じです。

メッセージの送信

次はメッセージの送信です。ヘッダのAPIリストから"SendMessage"を選択します。
パラメータは以下の2つです。
Queue Url(必須)::キューの作成で取得したキューURLを指定します。メッセージはこのURLをキューの識別子として送信され、受信側でもこのURLを指定して受信します。
Message Body(必須):メッセージの内容です。

ここではQueueUrlに先ほど作成した"hoge"というQueueのQueuUrl "
https://queue.amazonaws.com/821635308497/hoge"を、MessageBodyには"Hello World!"を入力してInvoke Requestを押します。
すると以下のようなレスポンスが返ります
<SendMessageResponse>
  <SendMessageResult>
    <MD5OfMessageBody>ed076287532e86365e841e92bfc50d8c</MD5OfMessageBody>
    <MessageId>f5735801-1b32-44f6-a86b-416a04bb969a</MessageId>
  </SendMessageResult>
  <ResponseMetadata>
    <RequestId>233b5572-e2a6-4e30-8ee3-27250276168f</RequestId>
  </ResponseMetadata>
</SendMessageResponse>
これでメッセージがキューに送られました。

メッセージの受信

次にメッセージを受信してみます。
APIリストから"ReceiveMessage"を選びます。


パラメータが以下のとおりです。
  • QueueUrl(必須):送信時と同じキュー名に該当するキューURLを指定します。CreateQueueで取得します。
  • Max Number Of Messages(オプション):取得する最大のメッセージ件数を指定します。デフォルトは1です。一度にたくさんのメッセージを処理したい場合はこれを増やします。
  • Visibility Timeout(オプション):一度メッセージを受信するとこの秒数の間は、他のインスタンスのReceiveMessageリクエストからこのメッセージを隠します。デフォルトはキューのVisibility Timeoutと同じになります。
 ここではQueueUrlに先ほどの送信時のキューURL"https://queue.amazonaws.com/821635308497/hoge"を指定して、InvokeRequestを押すと以下のレスポンスが返ります。
<ReceiveMessageResponse>
  <ReceiveMessageResult>
    <Message>
      <MessageId>f5735801-1b32-44f6-a86b-416a04bb969a</MessageId>
      <ReceiptHandle>0NNAq8PwvXtwwfdMtBtd6ZxXkxF39Z/IYeGA072QQSZ0DJ3gVOmjI2Gh/oFnb0IeJqy5Zc8kH4JARkzdFBpldzaAPSeOkXQZwFSsJUhd5VMVLzK3+eRCyfzyRC5taEby2sLs6d2PAFOgJcNQRNWCRx2ZBrIVvHrDEKIvb6EDD5Mzd5Tn7Sx1Kdc/TnR7K9fu</ReceiptHandle>
      <MD5OfBody>ed076287532e86365e841e92bfc50d8c</MD5OfBody>
      <Body>Hello World!</Body>
    </Message>
  </ReceiveMessageResult>
    <ResponseMetadata>
      <RequestId>5115c13c-5c58-4f35-aae0-505c892a9c00</RequestId>
    </ResponseMetadata>
</ReceiveMessageResponse> 
ここで、ReceiveMessageResultの中にMessage要素が含まれており、その中のBody要素に先ほど送信した"Hello World!"が確認できます。このBody要素がメッセージ本体になります。
また、 Message要素の中のReceptHandleはメッセージの削除に使用されます。

メッセージの削除

メッセージは受信しただけでは削除されません。
通常メッセージは受信した後に明示的に削除する必要があります。
APIリストからDeleteMessageを選択します。


パラメータは以下の2つです。
Queue Url(必須):削除したいメッセージが含まれているキューのURLです。送信や受信時のキューURLと同じものです。
Recept Handle(必須):受信したメッセージに含まれるReceptHandleを指定します。これはそのキューの中のメッセージへのポインタのようなものです。

QueueUrlに受信時のキューURLとして指定したのと同じ"https://queue.amazonaws.com/821635308497/hoge"、Recept Handleに受信のレスポンスに含まれていたReceptHandleである"0NNAq8PwvXtwwfdMtBtd6ZxXkxF39Z/IYeGA072QQSZ0DJ3gVOmjI2Gh/oFnb0IeJqy5Zc8kH4JARkzdFBpldzaAPSeOkXQZwFSsJUhd5VMVLzK3+eRCyfzyRC5taEby2sLs6d2PAFOgJcNQRNWCRx2ZBrIVvHrDEKIvb6EDD5Mzd5Tn7Sx1Kdc/TnR7K9fu"を指定して、Invoke Requestを押します。

すると以下のレスポンスが返り、メッセージが削除されます。
<DeleteMessageResponse>
  <ResponseMetadata>
    <RequestId>bb6333a8-bc6f-4151-ace4-efbca103316d</RequestId>
  </ResponseMetadata>
</DeleteMessageResponse>

他にもいくつかAPIが存在しますが、通常メインで使用するのは、上記の4つになります。
次回はこれをプログラムから使用してみます。