Mục Đích
- Call api tới AWS Simple Queue Service(SQS) thông qua sdk
Code Mẫu
Chuẩn bị
- cài đặt sdk aws, run:
go get -u github.com/aws/aws-sdk-go/
- cấu hình access-key and secret-key, nếu bạn không biết thì đọc tham khảo link: https://viblo.asia/p/cau-hinh-aws-credential-zOQJwYPxVMP
Tạo một session
- tạo một session để tái sử dụng trong những function khác
- profile được dùng là default, để biết profile đang được cấu hình, run trên linux/mac
cat ~/.aws/credentials
- function để tạo 1 session
func GetSession() *session.Session {
sess, err := session.NewSessionWithOptions(session.Options{
Profile: "default",
Config: aws.Config{
Region: aws.String("us-west-1"),
},
})
if err != nil {
panic(err)
}
return sess
}
Cách tạo ra 1 queue
- sử dụng function
CreateQueue
trongaws-sdk
để tạo 1 queue cho việc test. - có một số parameter quan trọng cần lưu ý:
queueName
: name của queue mà bạn muốn tạoDelaySeconds
: thời gian message bạn muốn giữ lại trước khi gửi đi,VisibilityTimeout
: thời gian một message trước khi expire.
- function create 1 queue
func CreateQueue(sess *session.Session, queueName string) (*sqs.CreateQueueOutput, error) {
sqsClient := sqs.New(sess)
result, err := sqsClient.CreateQueue(&sqs.CreateQueueInput{
QueueName: &queueName,
Attributes: map[string]*string{
"DelaySeconds": aws.String("0"),
"VisibilityTimeout": aws.String("60"),
},
})
if err != nil {
return nil, err
}
return result, nil
}
Get URL của 1 queue
- Tất cả các apis điều yêu cầu url của queue, vì thế sử dụng
GetQueueURL
để truy vấn url của queue-name - function get url
func GetQueueURL(sess *session.Session, queue string) (*sqs.GetQueueUrlOutput, error) {
sqsClient := sqs.New(sess)
result, err := sqsClient.GetQueueUrl(&sqs.GetQueueUrlInput{
QueueName: &queue,
})
if err != nil {
return nil, err
}
return result, nil
}
Gửi message đến queue
- chúng ta sẽ sử dụng hàm
SendMessage
từaws-sdk
để gửi message đến queue - một vài paramters quan trọng cần chú ý trong lúc gửi message:
QueueUrl
: url của queue muốn gửi message.- MessageBody: body được gửi đến queue, có thể là json-string hoặc string
- function gửi message
func SendMessage(sess *session.Session, queueUrl string, messageBody string) (*sqs.SendMessageOutput, error) {
sqsClient := sqs.New(sess)
sendOut, err := sqsClient.SendMessage(&sqs.SendMessageInput{
QueueUrl: &queueUrl,
MessageBody: aws.String(messageBody),
})
if err != nil {
return nil, err
}
return sendOut, nil
}
Nhận message từ queue
- chúng ta sẽ sử dụng hàm
ReceiveMessage
từaws-sdk
để lấy message từ queue - một vài paramters quan trọng cần được chú ý trong lúc nhận message:
QueueUrl
: url của queue muốn nhận message.MaxNumberOfMessages
: tổng số message có thể nhận được.
- function receive messsage:
func GetMessages(sess *session.Session, queueUrl string, maxMessages int) (*sqs.ReceiveMessageOutput, error) {
sqsClient := sqs.New(sess)
msgResult, err := sqsClient.ReceiveMessage(&sqs.ReceiveMessageInput{
QueueUrl: &queueUrl,
MaxNumberOfMessages: aws.Int64(int64(maxMessages)),
})
if err != nil {
return nil, err
}
return msgResult, nil
}
Xoá message trong queue
- khi nhận message từ queue, message sẽ không tự động xoá ra khỏi queue.
- consumer khác có thể nhận message sau thời gian
VisibilityTimeout
hết hạn. - để đảm bảo rằng không bị trùng message thì cần phải xoá.
- chúng ta sẽ sử dụng hàm
DeleteMessage
từaws-sdk
để xoá message từ queue - cần cung cấp
ReceiptHandle
trong thành phần của method - function xoá message:
func DeleteMessage(sess *session.Session, queueUrl string, messageHandle *string) error {
sqsClient := sqs.New(sess)
_, err := sqsClient.DeleteMessage(&sqs.DeleteMessageInput{
QueueUrl: &queueUrl,
ReceiptHandle: messageHandle,
})
return err
}
Xoá tất cả message trong queue
- chúng ta sẽ sử dụng hàm
PurgeQueue
từaws-sdk
để xoá tất cả message trong queue - một vài paramters quan trọng cần được chú ý trong lúc xoá tất cả message:
- function xoá tất cả message:
func PurgeQueue(sess *session.Session, queueUrl string) error {
sqsClient := sqs.New(sess)
_, err := sqsClient.PurgeQueue(&sqs.PurgeQueueInput{
QueueUrl: aws.String(queueUrl),
})
return err
}
Ref
- fullsource:
- aws sqs document: https://docs.aws.amazon.com/sqs/index.html
Contact
- facebook: https://www.facebook.com/phucducdev/
- gmail: ducnp09081998@gmail.com
- linkedin: https://www.linkedin.com/in/phucducktpm/
- hashnode: https://hashnode.com/@OpenDev
- telegram: https://t.me/OpenDevGolang
Nguồn: viblo.asia