AipoでAmazon SQSのメッセージを待ち受ける

nbeppu 482views 更新:2014年2月19日
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 と他システムとの連携を考えている場合は活用してみてください。

 

ログイン / 新規登録してコメントする

このソースコードをストックして後で利用したり、作業に利用したソースコードをまとめることができます。

こちらもお役に立つかもしれません