Skip to content

Instantly share code, notes, and snippets.

@mand2
Created August 15, 2021 16:29
Show Gist options
  • Save mand2/9e4cb49564249f150cd3d10de8b4a827 to your computer and use it in GitHub Desktop.
Save mand2/9e4cb49564249f150cd3d10de8b4a827 to your computer and use it in GitHub Desktop.
package com.order.aws;
import com.amazonaws.services.sqs.AmazonSQS;
import com.amazonaws.services.sqs.AmazonSQSClientBuilder;
import com.amazonaws.services.sqs.model.*;
import java.lang.UnsupportedOperationException;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import static java.util.stream.Collectors.toList;
public class OrderSqs {
private static final String QUEUE_NAME = "실제_SQS_이름";
private AmazonSQS sqs;
public static final String ORDER_SQS_RESULT_SUCCESS = "SUCCESS";
public static final String ORDER_SQS_RESULT_FAILED = "FAILED";
public OrderSqs() {
this.sqs = AmazonSQSClientBuilder.defaultClient();
}
// 주문 내역 1개만 보낼 때
public String sendOrder(Order order) throws Exception {
try {
// create queue
sqs.createQueue(QUEUE_NAME);
// get queue url
String queryUrl = sqs.getQueueUrl(QUEUE_NAME).getQueueUrl();
// create request
SendMessageRequest sendMessageRequest = new SendMessageRequest()
.withQueueUrl(queryUrl)
.withMessageBody(order.createMessage())
.withDelaySeconds(5);
// send
SendMessageResult sendMessageResult = sqs.sendMessage(sendMessageRequest);
// get response
if (Objects.isNull(sendMessageResult.getMessageId()) || "".equals(sendMessageResult.getMessageId())) {
throw new NullPointerException(ORDER_SQS_RESULT_FAILED);
}
return ORDER_SQS_RESULT_SUCCESS;
} catch (UnsupportedOperationException | InvalidMessageContentsException | NullPointerException e) {
throw new Exception("error on sending one Order");
}
}
// 주문 내역 동시에 여러개 보낼 때
public String sendOrder(List<Order> orders) throws Exception {
try {
// create queue
sqs.createQueue(QUEUE_NAME);
// get queue url
String queryUrl = sqs.getQueueUrl(QUEUE_NAME).getQueueUrl();
// create request
SendMessageBatchRequest sendMessageBatchRequest = new SendMessageBatchRequest()
.withQueueUrl(queryUrl)
.withEntries(this.setOrders(orders));
// send
SendMessageBatchResult sendMessageBatchResult = sqs.sendMessageBatch(sendMessageBatchRequest);
// get response
if (!sendMessageBatchResult.getFailed().isEmpty()
|| sendMessageBatchResult.getSuccessful().isEmpty()
|| sendMessageBatchResult.getSuccessful().size() < orders.size()) {
throw new NullPointerException(ORDER_SQS_RESULT_FAILED);
}
return ORDER_SQS_RESULT_SUCCESS;
} catch (UnsupportedOperationException | InvalidMessageContentsException | NullPointerException e) {
throw new Exception("error on sending multiple Order");
}
}
private List<SendMessageBatchRequestEntry> setOrders(List<Order> orders) {
return orders.stream()
.map(order -> new SendMessageBatchRequestEntry(order.getOrderSeq()+"", order.createMessage()))
.collect(toList());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment