본문 바로가기
마이크로서비스

AWS Simple Queue Service(SQS) 예제 코드로 다가가기 - #2

by simplify-len 2021. 11. 20.

 

이전 글 - 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);
}

 

댓글