package queue import ( "context" "log" "github.com/aws/aws-sdk-go-v2/service/sqs" ) type Controllers struct { Name NameController } type Queue struct { Config *QueueConfig Controllers *Controllers } func PollMessages(ctx context.Context, queue *Queue) { for { result, err := queue.Config.Client.ReceiveMessage(ctx, &sqs.ReceiveMessageInput{ QueueUrl: &queue.Config.URL, MaxNumberOfMessages: 1, WaitTimeSeconds: 2, VisibilityTimeout: 2, MessageAttributeNames: []string{ "type", }, }) if err != nil { log.Printf("Message Fetch Fail: %v", err) continue } for _, message := range result.Messages { go func() { toProcess, err := processMessage(ctx, queue, message) if !toProcess { return } if err != nil { log.Printf("Message Process Fail: %v", err) } }() } } }