func (q *queuePoller) drainMessages(ctx context.Context) error { service := sqs.New(q.cfg) for { select { case <-ctx.Done(): return ctx.Err() case <-q.closeSignal: return nil default: } msg := sqs.ReceiveMessageInput{ QueueUrl: &q.queueURL, WaitTimeSeconds: &q.waitTimeSeconds, } if q.visibilityTimeout != 0 { msg.VisibilityTimeout = &q.visibilityTimeout } resp, err := service.ReceiveMessage(&msg) if err != nil { return wraperr(err, "cannot receive messagges from queue") } if err := q.forwardMsgs(ctx, resp); err != nil { return err } } }