Skip to content

Instantly share code, notes, and snippets.

@vanhtuan0409
Last active May 21, 2019 03:32
Show Gist options
  • Save vanhtuan0409/83b5588f7931613bbd0618089e008060 to your computer and use it in GitHub Desktop.
Save vanhtuan0409/83b5588f7931613bbd0618089e008060 to your computer and use it in GitHub Desktop.
Golang AWS SQS
package main
import (
"fmt"
"log"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/aws/external"
"github.com/aws/aws-sdk-go-v2/service/sqs"
)
var (
svc *sqs.SQS
queueURL = "https://sqs.ap-southeast-1.amazonaws.com/374611323713/sample-queue"
)
func init() {
cfg, err := external.LoadDefaultAWSConfig()
if err != nil {
panic(err)
}
svc = sqs.New(cfg)
}
type handleFn func(msq sqs.Message) error
func startPolling(fn handleFn) {
log.Println("Start polling")
for {
log.Println("Sending request to SQS")
request := svc.ReceiveMessageRequest(&sqs.ReceiveMessageInput{
QueueUrl: &queueURL,
WaitTimeSeconds: aws.Int64(10),
})
result, err := request.Send()
if err != nil {
log.Printf("Cannot send request. ERR: %v\n", err)
}
for _, message := range result.Messages {
go handleMessage(message, fn)
}
}
}
func handleMessage(message sqs.Message, fn handleFn) {
if err := fn(message); err != nil {
log.Printf("Handle message error. ERR: %v\n", err)
}
// Delete message after handled
request := svc.DeleteMessageRequest(&sqs.DeleteMessageInput{
QueueUrl: &queueURL,
ReceiptHandle: message.ReceiptHandle,
})
_, err := request.Send()
if err != nil {
log.Printf("Delete message error. ERR: %v\n", err)
}
}
func main() {
startPolling(func(m sqs.Message) error {
fmt.Printf("Received message %s\n", *m.Body)
return nil
})
}
package main
import (
"fmt"
"time"
"github.com/aws/aws-sdk-go-v2/aws/external"
"github.com/aws/aws-sdk-go-v2/service/sqs"
)
var (
svc *sqs.SQS
queueURL = "https://sqs.ap-southeast-1.amazonaws.com/374611323713/sample-queue"
)
func init() {
cfg, err := external.LoadDefaultAWSConfig()
if err != nil {
panic(err)
}
svc = sqs.New(cfg)
}
func main() {
msg := fmt.Sprintf("Hello world!!! Timestamp %v", time.Now())
fmt.Println(msg)
request := svc.SendMessageRequest(&sqs.SendMessageInput{
MessageBody: &msg,
QueueUrl: &queueURL,
})
result, err := request.Send()
if err != nil {
panic(err)
}
fmt.Println("Success:", *result.MessageId)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment