code: func (s *subscriber) run(hdlr broker.Handler) {
  	log.Log(fmt.Sprintf("SQS subscription started. Queue:%s, URL: %s", s.queueName, s.URL))
  	for {
  		select {
  		case <-s.exit:
  			return
  		default:
  			result, err := s.svc.ReceiveMessage(&sqs.ReceiveMessageInput{
  				QueueUrl:            &s.URL,
  				MaxNumberOfMessages: s.getMaxMessages(),
  				VisibilityTimeout:   s.getVisibilityTimeout(),
  				WaitTimeSeconds:     s.getWaitSeconds(),
  				AttributeNames: aws.StringSlice([]string{
  					"SentTimestamp", // TODO: not currently exposing this to plugin users
  				}),
  				MessageAttributeNames: aws.StringSlice([]string{
  					"All",
  				}),
  			})
  
  			if err != nil {
  				time.Sleep(time.Second)
  				log.Log(fmt.Sprintf("Error receiving SQS message: %s", err.Error()))
  				continue
  			}
  
  			if len(result.Messages) == 0 {
  				time.Sleep(time.Second)
  				continue
  			}
  
  			for _, sm := range result.Messages {
  				s.handleMessage(sm, hdlr)
  			}
  		}
  	}
  }
docs: // run is designed to run as a goroutine and poll SQS for new messages. Note that it's possible to receive
  // more than one message from a single poll depending on the options configured for the plugin