Example #1
0
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
		}
	}
}