그리고 대기열 생성하면, topic 하나를 생성한 것이다.
메세지 주고 받는 걸 오른 쪽 위에 메시지 전송 및 수신에서 테스트 해볼 수 있다.
받는 걸 테스틀하려면 메시지 풀링을 눌러보면 된다.
그런데 우리가 해야하는건 여기서 확인하는게 아닌, 다양한 어플리케이션에서 이 메세지를 주고 받을 수 있냐이다.
큐 url을 파이썬 코드에 넣어준다.
파이썬에서 메시지를 url로 보낸 후, aws에서 메시지 풀링을 눌러보면 잘 담겨있는 것을 확인할 수 있다.
확인하면 오류 페이지 처럼 보이는 페이지가 나오는데, 오류가 아님
메세지 아이디가 오고, 그 밑에 오면서 위변조가 일어나지 않았음을 증명해주는 해시값이 같이 오게 됨.
SQS는 Lambda 트리거를 제공해줌.
우리는 Lambda 함수를 API GATEWAY로 실행시켜줬는데, SQS로도 할 수 있음.
메세지를 받았을 때 특정 함수를 구동시키게끔 해주는 역할 가능.
SNS는 SQS에서 메시지가 왔을 때, 알람 기능처럼 SNS로 메일을 보내줌.
import boto3
sqs = boto3.client('sqs')
queue_url = 'https://sqs.ap-northeast-2.amazonaws.com/23492309470119/자신의 큐 이름'
for i in range(100):
response = sqs.send_message(
QueueUrl=queue_url,
MessageBody=(f'hi{i}')
)
import boto3
sqs = boto3.client('sqs')
queue_url = 'https://sqs.ap-northeast-2.amazonaws.com/23492309470119/자신의 큐 이름'
response = sqs.receive_message(
QueueUrl=queue_url,
AttributeNames=['All'],
MessageAttributeNames=['All'],
MaxNumberOfMessages=10,
VisibilityTimeout=0,
WaitTimeSeconds=0
)
messages = []
sqs.delete_message(
QueueUrl=queue_url,
ReceiptHandle=receipt_handle
)
if 'Messages' in response:
messages.extend(response['Messages'])
for m in messages:
print(m['Body'])
import boto3
import time
sqs = boto3.client('sqs')
queue_url = 'https://sqs.ap-northeast-2.amazonaws.com/자신의 것'
while True:
response = sqs.receive_message(
QueueUrl=queue_url,
AttributeNames=['All'],
MessageAttributeNames=['All'],
MaxNumberOfMessages=1,
VisibilityTimeout=0,
WaitTimeSeconds=20
)
if 'Messages' in response:
# 메시지 처리 코드를 추가합니다.
mess = response['Messages'][0]
print(mess['Body'])
sqs.delete_message(
QueueUrl=queue_url,
ReceiptHandle=mess['ReceiptHandle']
)
# 일정 시간마다 루프를 중단하고 다시 시작합니다.
time.sleep(5)
실시간으로 나오게 된다.
만약 delete_message 코드로 sqs에 쌓이는 메시지를 삭제하지 않으면 계속해서 똑같은게 오게된다.
한번 보내면 큐에서 삭제를 해줘서 같은게 못오게 해줘야한다.
SQS를 이용해서 채팅도 이용할 수 있다.
실시간으로 받는 코드를 구동 시켜놓은 상태에서, 아래의 코드를 구동시켜서 입력하면 실시간으로 채팅처럼 나오게 된다.
import boto3
sqs = boto3.client('sqs')
queue_url = 'SQS에서 할당받은 url'
while True:
message = input()
response = sqs.send_message(
QueueUrl=queue_url,
MessageBody=(message)
)