技術メモ

技術メモ

ラフなメモ

SQSをjava-sdkで試してみる

SQSをJavaSDKを用いて試してみます

開発者ガイド

https://docs.aws.amazon.com/ja_jp/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dg.pdf

ビルド設定

logbackも利用したいのでdependenciesに含めておきます。

build.gradle

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "io.spring.gradle:dependency-management-plugin:1.0.3.RELEASE"
    }
}

apply plugin: 'java'
apply plugin: 'io.spring.dependency-management'

sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencyManagement {
    imports {
        mavenBom 'software.amazon.awssdk:bom:2.3.9'
    }
}

dependencies {
    compile 'software.amazon.awssdk:sqs'
    compile 'ch.qos.logback:logback-classic:1.1.3'
    testImplementation 'junit:junit:4.12'
}

実装例

ドキュメントを読めばそのまま、、、という感じなのでなんとも

SQSのロングポーリングは便利ですね。一定間隔でキューをポーリングしつつ、キューで利用可能なメッセージがあればすぐにメッセージを返すので、イベントドリブンなアプリケーション構築に便利です。

動作確認

以下のようなコードで確認しました。

import java.util.Random;
import java.util.UUID;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SqsSampleClientTest {

  final static Logger LOGGER = LoggerFactory.getLogger(SqsSampleClient.class);

  @Test
  public void 送信できるかのテスト() {
    SqsSampleClient broker = new SqsSampleClient();

    Random random = new Random();
    String body = "send test " + random.nextInt(100) + " " + UUID.randomUUID().toString();
    LOGGER.debug(body);
    broker.sendMessage(body);
  }

 @Test
 public void 受信できるかのテスト() {
   SqsSampleClient broker = new SqsSampleClient();

   List<Message> messages = broker.receiveMessages();
   LOGGER.debug("received {} messages", messages.size());

   for (Message message : messages) {
     LOGGER.debug(message.body());

     broker.deleteMessage(broker.getUrl().queueUrl(), message.receiptHandle());
     LOGGER.debug("message deleted");
   }
 }
}

余談ですが、PythonのBoto3などを使っても簡単に試せます。

import boto3 
sqs = boto3.client('sqs') 
queue = sqs.get_queue_url(QueueName='test-queue')

for i in range(5):
    responses = sqs.send_message(QueueUrl= queue['QueueUrl'], MessageBody='Test' + str(i))