SQSをjava-sdkで試してみる
開発者ガイド
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))