이전 글 - AWS Simple Queue Service(SQS) 이론적으로 다가가기 - #1
이번에는 예제코드로 SQS 를 사용하는 방법에 대해서 알아보려고 합니다.
만약에 SQS 를 스프링부트에서 사용한다는 가정하에 2가지 예제를 남겨드릴려고 합니다.
- 순수한 AWS-SDK 를 사용한 SQS 예제코드
- awspring 에서 제공하는 SQS 예제 코드
1. 순수한 AWS-SDK 를 사용한 SQS 예제코드
자세한 내용은 공식문서에 잘나와있어 해당 내용을 참조하면 된다. 간단하게 몇개만 공유해보면 아래와 같습니다.
@GetMapping(value = "/getQueueUrls")
public ResponseEntity<String> getQueueUrls() {
ListQueuesRequest build = ListQueuesRequest.builder().build();
List<String> strings = sqsClient.listQueues(build).queueUrls();
return ResponseEntity.ok(String.join("<br>", strings));
}
@GetMapping(value = "/getSingleQueueUrls")
public ResponseEntity<String> getSingleQueueUrls() {
GetQueueUrlRequest request = GetQueueUrlRequest.builder().queueName("TEST-JK-QUEUE").build();
GetQueueUrlResponse queueUrl = sqsClient.getQueueUrl(request);
return ResponseEntity.ok(queueUrl.queueUrl());
}
@GetMapping(value = "/send")
public ResponseEntity<String> sender(
@RequestParam(value = "msg") String meg
) {
sqsClient.sendMessage(SendMessageRequest.builder()
.queueUrl(URL)
.messageBody(meg)
.delaySeconds(10)
.build());
return ResponseEntity.ok("ok");
}
대부분의 형태는 XXXXRequest 의 메세지를 보내고 난 뒤, 이것을 sqsClient.XXXX(XXXXRequest) 을 전송합니다.
2. awspring 에서 제공하는 SQS 예제 코드
@Configuration
public class SqsQueueSender {
private final QueueMessagingTemplate queueMessagingTemplate;
private final String SQS_QUEUE_NAME = "TEST-JK-QUEUE";
public QueueMessagingTemplate getQueueMessagingTemplate(){
AmazonSQSAsync amazonSQSAsync = AmazonSQSAsyncClientBuilder
.defaultClient();
return new QueueMessagingTemplate(amazonSQSAsync);
}
@Autowired
public SqsQueueSender() {
this.queueMessagingTemplate = this.getQueueMessagingTemplate();
}
public void send(String message) {
this.queueMessagingTemplate.send(SQS_QUEUE_NAME, MessageBuilder.withPayload(message)
.build());
}
public void receive() {
Message<?> receive = this.queueMessagingTemplate.receive(SQS_QUEUE_NAME);
System.out.println(receive);
}
/**
* @MessageMapping
* https://tva1.sinaimg.cn/large/008i3skNgy1gvpevguzfwj61sr0u0n7e02.jpg
* @param message
*/
@MessageMapping("TEST-JK-QUEUE")
public void queueListener(String message, @Headers Map headers) {
System.out.println("TEST-JK-QUEUE > " + message);
}
}
Awspring에서 사용할 경우에는 보내는 경우는 아래와 같다.
this.queueMessagingTemplate.send(SQS_QUEUE_NAME, MessageBuilder.withPayload(message)
.build());
받는 경우는 아래와 같다.
@MessageMapping("TEST-JK-QUEUE")
public void queueListener(String message, @Headers Map headers) {
System.out.println("TEST-JK-QUEUE > " + message);
}
'마이크로서비스' 카테고리의 다른 글
TestContainer의 docker-compose 활용했지만, 테스트가 통과하지 않았다면? - 활용 (0) | 2022.04.17 |
---|---|
TestContainer 를 통해 테스트 용이성 높이기 - 입문 (0) | 2022.04.17 |
AWS Simple Queue Service(SQS) 이론적으로 다가가기 - #1 (0) | 2021.11.14 |
Eventuate.io 간단 파헤치기 (0) | 2020.10.29 |
오케스트레이션(orchestration)과 코레오그래피 (choreography) (0) | 2020.10.17 |
댓글