Javaを使用してAmazon SQSのキューにメッセージの送信、キューからの受信を行ってみました。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "sqs:DeleteMessage", "sqs:ReceiveMessage", "sqs:SendMessage" ], "Resource": "arn:aws:sqs:ap-northeast-1:[アカウントID]:devblog" } ] }
// 認証情報を用意 AWSCredentials credentials = new BasicAWSCredentials( // アクセスキー "********************", // シークレットキー "****************************************" ); // クライアントを生成 client = AmazonSQSClientBuilder .standard() .withCredentials(new AWSStaticCredentialsProvider(credentials)) .withRegion(Regions.AP_NORTHEAST_1.getName()) .build();
// 詳細な条件を指定してメッセージを送信する場合 SendMessageRequest request = new SendMessageRequest() .withQueueUrl(QUEUE_URL) .withDelaySeconds(10) // 10秒間遅延させる(不可視にする) .withMessageBody("サンプルメッセージA " + System.currentTimeMillis()); client.sendMessage(request); // シンプルにメッセージを送信する場合 client.sendMessage(QUEUE_URL, "サンプルメッセージB " + System.currentTimeMillis());
ReceiveMessageRequest request = new ReceiveMessageRequest() .withQueueUrl(QUEUE_URL) .withWaitTimeSeconds(5) // 最大5秒間のロングポーリングを行う .withMaxNumberOfMessages(10); // 最大10件のメッセージを取得する ReceiveMessageResult result = client.receiveMessage(request); for (Message message : result.getMessages()) { System.out.println("Message ID: " + message.getMessageId()); System.out.println("Receipt Handle: " + message.getReceiptHandle()); System.out.println("Message Body: " + message.getBody()); }※ロングポーリングを使用すると、キュー上にメッセージが無い場合に指定した時間メッセージが来るのを待つことが出来るようになります。
// メッセージの削除 client.deleteMessage(QUEUE_URL, message.getReceiptHandle());