Created
August 15, 2021 16:29
-
-
Save mand2/9e4cb49564249f150cd3d10de8b4a827 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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