Amazon SQS のキューに入ってきたメッセージを Aipo 上で待ち受けたい場合は、
以下のように Jetspeed の Daemon クラスを用意します。
AWS への問い合わせは公式の SDK を利用しましょう。
public class SampleDaemon implements Daemon { private final String awsSecretKey = "*********************"; private final String awsAccessKey = "*********************"; private final String queueUrl = "*********************"; @Override public void run() { // SQSクライアント作成 AmazonSQS client = new AmazonSQSClient(new AWSCredentials() { @Override public String getAWSSecretKey() { return awsSecretKey; } @Override public String getAWSAccessKeyId() { return awsAccessKey; } }); // メッセージを取得 ReceiveMessageResult receiveMessage = client.receiveMessage(new ReceiveMessageRequest(queueUrl) .withMaxNumberOfMessages(5) .withVisibilityTimeout(60 * 5)); List<Message> messages = receiveMessage.getMessages(); for (Message message : messages) { String receiptHandle = message.getReceiptHandle(); // メッセージに含まれているデータを取得 String body = message.getBody(); // やりたい処理 // 処理に成功したらメッセージを削除 client.deleteMessage(new DeleteMessageRequest(queueUrl, receiptHandle)); } } @Override public DaemonConfig getDaemonConfig() { return null; } @Override public DaemonEntry getDaemonEntry() { return null; } @Override public String getMessage() { return null; } @Override public int getResult() { return 0; } @Override public int getStatus() { return 0; } @Override public void init(DaemonConfig config, DaemonEntry entry) { } @Override public void setResult(int result) { } @Override public void setStatus(int result) { } }
次に、Jetspeed の設定ファイルでこのデーモンを登録します。
/WEB-INF/conf/JetspeedJResources.properties
# デーモン名 daemon.entry=SampleDaemon # デーモンクラスへのパス daemon.SampleDaemon.classname=com.sample.SampleDaemon # 繰り返す間隔(秒) daemon.SampleDaemon.interval=60 # Servlet起動時に実行するか daemon.SampleDaemon.onstartup=true
これで Aipo 起動中、一分おきに SQS のキューを確認しにいくことができるようになります。
Aipo と他システムとの連携を考えている場合は活用してみてください。