본문 바로가기
클라우드/AWS

AWS) SQS 사용하여 메시지 전송 및 수신

by 빈스터디 2023. 3. 21.

pull은 가져가도 돼? 한 다음에 가져가는 것

push는 subscriber를 찔러서 가져가는 것

 

<토픽 하나 생성>

aws sqs > 표준 > queue이름 아무거나 > 암호화 원래 시켜야 하지만,, 비활성화로 > 액세스 정책 (JSON편집, Principal : "*" < 모두다 이용할 수 있게) > 나머지는 다 비활성화 > 대기열(큐) 생성

 

 

AWS 콘솔에서 테스트

> '메시지 전송 및 수신'으로 테스트 가능

> 메시지 받을 땐 '메시지 풀링' 누르면 됨

 

 

파이썬 코드 boto3으로 테스트

queue_url에 대기열 넣으면 됨

messageBody에 메시지 입력하면 된다.

 

> 송신코드

import boto3

sqs = boto3.client('sqs')

queue_url = '[대기열 url 입력]'

response = sqs.send_message(
    QueueUrl=queue_url,
    MessageBody=('[보내고자하는 메시지 입력]')
)

print(response['MessageId'])

 

> 수신코드

import boto3

sqs = boto3.client('sqs')

queue_url = '[대기열 url 입력]'

response = sqs.receive_message(
    QueueUrl=queue_url
)

message = response['Messages'][0]
receipt_handle = message['ReceiptHandle']

sqs.delete_message(
    QueueUrl=queue_url,
    ReceiptHandle=receipt_handle
)
print('Received and deleted message: %s' % message)

 

액세스 키 설정해줘야한다.

안그럼, 이렇게 오류뜬다..

액세스 키 발급받고, aws configure명령어로 키 입력하고, send 한 후, receive해보니,

보낸 message라는 데이터가 잘 받아지는 것을 확인할 수 있었다.

 

 

REST API로 테스트

> 송신

 

대기열 url(=https://~)?Action=SendMessage&MessageBody=보내고자 하는 메시지

 

빨간색으로 표시한 부분이 보내는 메시지를 해시값으로 바꾼 것이다.

 

> 수신

 

대기열 url(=https://~)?Action=ReceiveMessage

 

데이터가 받아지는 순서가 없어서 위에서 보냈던 메시지가 받아올 때 까지 새로고침을 눌렀다.

 

원하는 메시지가 안 받아진 모습...

 

받아졌다! 첫번째 Body에 출력되는 데이터로 확인

 

*lambda는 원래 API GATEWAY를 통해서 호출했는데 SQS를 통해서 호출할 수도 있다.