Example #1
0
func (q *QueueInfo) ReceiveMessage(h ReceiveHandle) {
	var input sqs.ReceiveMessageInput
	input.QueueUrl = q.Queue
	input.WaitTimeSeconds = &waitTime
	input.MessageAttributeNames = []*string{&valueName}
	input.MaxNumberOfMessages = &maxMsg

	ro, _ := thisSQS.ReceiveMessage(&input)
	l := len(ro.Messages)
	if l > 0 {
		needDele := set.New()
		wg := new(sync.WaitGroup)
		for i := 0; i < l; i++ {
			msg := ro.Messages[i]
			atts := msg.MessageAttributes
			wg.Add(1)
			go h(wg, atts["value"].BinaryValue, needDele, i)
		}
		wg.Wait()

		indexes := set.IntSlice(needDele)
		var entries []*sqs.DeleteMessageBatchRequestEntry
		for _, index := range indexes {
			msg := ro.Messages[index]

			var entry sqs.DeleteMessageBatchRequestEntry
			entry.Id = msg.MessageId
			entry.ReceiptHandle = msg.ReceiptHandle
			entries = append(entries, &entry)
		}

		q.deleteMessage(&entries)
	}
	q.ReceiveMessage(h)
}