SQSで複数のデータをまとめて送る

@iwasaki 11views 更新:2017年1月6日

1件ずつSQSを作成するケース

            List<String> hogeList = getHogeList(); //StringのListを返すメソッド
            for (String title : hogeList) {
                        try {
                          sqs.sendMessage(new SendMessageRequest(queueUrl, title));
                        } catch (Throwable t) {
                          t.printStackTrace();
                        }
            }

10件ずつSQSを作成するケース

SendMessageBatchで一度に送れるのは最大で10件です。

http://docs.aws.amazon.com/ja_jp/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-batch-api.html#send-message-batch-limit

            List<String> hogeList = getHogeList(); //StringのListを返すメソッド
            List<List<String>> devideHogeList = devide(hogeList, 10); //Listを指定件数ずつに分割するメソッド
            for (List<String> hogeSubList : devideHogeList) {
              try {
                List<SendMessageBatchRequestEntry> entries =
                  new ArrayList<SendMessageBatchRequestEntry>();
                for (String title : hogeSubList) {
                  entries.add(new SendMessageBatchRequestEntry(title, title)); //一度に送るリクエストの中でmessageBodyだけでなく、ユニークなidを付ける必要があります。
                }
                sqs.sendMessageBatch(new SendMessageBatchRequest(
                  queueUrl,
                  entries));
              } catch (Throwable t) {
                t.printStackTrace();
              }
            }

また、Batch以外にはAmazonSQSAsyncClientを使うことで水平スケーリングすることも可能です。

http://docs.aws.amazon.com/ja_jp/AWSSimpleQueueService/latest/SQSDeveloperGuide/throughput.html

参考

http://qiita.com/uzresk/items/7a2a0d7ef85445c50e31

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

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

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