- vừa được xem lúc

[AWS] Simple Queue Service - Phần 1

0 0 20

Người đăng: Open Dev

Theo Viblo Asia

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/

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 trong aws-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ạo
    • DelaySeconds: 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

Contact

Bình luận

Bài viết tương tự

- vừa được xem lúc

PDF Export, cẩn thận với những input có thể truyền vào

Giới thiệu. Dạo gần đây mình tình cờ gặp rất nhiều lỗi XSS, tuy nhiên trang đó lại có sử dụng dữ liệu người dùng input vào để export ra PDF.

0 0 49

- vừa được xem lúc

Giới thiệu về AWS Batch

Khi sử dụng hệ thống cloud service, điều chúng ta thường phải quan tâm đến không chỉ là hiệu suất hoạt động (performance) mà còn phải chú ý đến cả chi phí bỏ ra để duy trì hoạt động của hệ thống. Chắn hẳn là hệ thống lớn hay nhỏ nào cũng đã từng phải dùng đến những instance chuyên để chạy batch thực

0 0 127

- vừa được xem lúc

Tìm hiểu về AWS KMS

1. AWS KMS là gì. Ở KMS bạn có thể lựa chọn tạo symetric key (khóa đối xứng) hoặc asymetric key (khóa bất đối xứng) để làm CMK (Customer Master Key). Sau khi tạo key thì có thể thiết đặt key policy để control quyền access và sử dụng key.

0 0 52

- vừa được xem lúc

AWS VPC cho người mới bắt đầu

Tuần này, tôi trình bày lại những gì tôi đã học được về Virtual Private Cloud (VPC) của Amazon. Nếu bạn muốn xem những gì tôi đã học được về AWS, hãy xem Tổng quan về DynamoDB và Tổng quan về S3. VPC là gì. Những điều cần lưu ý:.

0 0 68

- vừa được xem lúc

AWS Essentials (Phần 6): Guildline SNS Basic trên AWS

Tiếp tục với chuỗi bài viết về Basic AWS Setting, chúng ta tiếp tục tìm hiểu tiếp tới SNS (Simple Notification Service). Đây là một service của AWS cho phép người dùng setting thực hiện gửi email, text message hay push notification tự động tới mobile device dựa trên event người dùng setting phía AWS

0 0 124

- vừa được xem lúc

Sử dụng Amazon CloudFront Content Delivery Network với Private S3 Bucket — Signing URLs

Trong nhiều trường hợp, thì việc sử dụng CDN là bắt buộc. Mình đã trải nghiệm với một số CDN nhưng cuối cùng mình lựa chọn sử dụng AWS CloudFront.

0 0 104