괴발개발 성장기

사이드 프로젝트/Amazon SQS

[Amazon SQS] SQS로 메시지 보내기

지니유 2023. 6. 26. 09:41
반응형

SQS에 메시지 넣었다.

간단히 넣는 방법은 이전 글을 참고하면 된다.

2022.11.15 - [사이드 프로젝트/Amazon SQS] - [Amazon SQS] SNS를 통해 FIFO방식으로 SQS에 메시지 보내기

 

[Amazon SQS] SNS를 통해 FIFO방식으로 SQS에 메시지 보내기

# 배경 이메일 아니라 큐에 메시지를 보내야 했다. 1) FIFO 방식이 아닌 표준방식 SNS만들고 SQS 연결했다. 이 때 메시지가 잘 보내졌다. 2) SNS에서 FIFO방식으로 만들고 FIFO방식의 SQS도 만들어서 연결

pink1016.tistory.com

 

 

원하는 방식대로 메시지를 보낼 수 있다.

알림톡 종류가 여러개여서 구분하기 위해서 eventType를 넣었다.

 

# mian

sess := session.Must(session.NewSessionWithOptions(session.Options{
		SharedConfigState: session.SharedConfigEnable,
	}))

	SQSURL := "SQSURL 주소 넣기"
	eventType := "donationRegistered"
	message := map[string]interface{}{
		"donationId": 1,
		"memberId":   1,
		"mobile":     "01000000000",
		"content":    "메시지 내용입니다.",
	}
	err := send.SendSqsMessage(sess, &SQSURL, eventType, message)
	if err != nil {
		log.Println("메시지 전송 에러")
	}

 

# SendSqsMessage

func SendSqsMessage(sess *session.Session, queueURL *string, eventType string, content interface{}) error {
	svc := sqs.New(sess)

	messageGroupId := eventType
	messageDeduplicationId := uuid.New().String()

	messageBody, _ := json.Marshal(content)
	dataType := "String"

	var _, err = svc.SendMessage(&sqs.SendMessageInput{
		MessageAttributes: map[string]*sqs.MessageAttributeValue{
			"EventType": {
				DataType:    &dataType,
				StringValue: &eventType,
			},
			"Env": {
				DataType:    &dataType,
				StringValue: &config.Config.Environment,
			},
			"Module": {
				DataType:    &dataType,
				StringValue: &config.Config.Module,
			},
		},
		MessageBody:            aws.String(string(messageBody)),
		QueueUrl:               queueURL,
		MessageGroupId:         &messageGroupId,
		MessageDeduplicationId: &messageDeduplicationId,
	})

	if err != nil {
		return err
	}

	return nil
}

MessageAttributes안에 구별할 수 있는 값들을 넣었다. 우리는 staging, dev, prod로 구별에서 로그가 들어가서 넣었다.

서비스도 많아서 서비스도 구분하기 위해서 모듈을 넣었다.

 

이렇게 정보를 구분해서 보냈다.

 

그럼 받는 쪽에서는 어떻게 받을까?

msgResult.Messages[i].MessageAttributes 안에 보낸 내용들이 있다.

map[Env:{ DataType: "String", StringValue: "local" }
EventType:{ DataType: "String", StringValue: "donationRegistered" }
Module:{ DataType: "String", StringValue: "send-message-service" }]

바디값에는   *msgResult.Messages[i].Body

{"content":"메시지 내용입니다.","donationId":1,"memberId":1,"mobile":"01000000000"}

 

이렇게 값이 들어가 있다.

메시지가 sqs에 들어오고 출력하는 것까지 공부했다.

이제는 서비스가 죽지 않고 계속 돌게 만들어야겠다.

 

# 참고 글

https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/using-sns-with-go-sdk.html

 

Amazon SNS Examples Using the AWS SDK for Go - AWS SDK for Go (version 1)

Thanks for letting us know this page needs work. We're sorry we let you down. If you've got a moment, please tell us how we can make the documentation better.

docs.aws.amazon.com

 

# 이슈

https://github.com/YooGenie/send-message-service/issues/17

 

SQS로 메시지 보내기 · Issue #17 · YooGenie/send-message-service

 

github.com

 

반응형