/
ensqs.go
78 lines (59 loc) · 1.34 KB
/
ensqs.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package ensqs
import (
"log"
"strconv"
"github.com/LeeQY/jobber"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/sqs"
)
type Value struct {
Key *string
V []byte
}
var (
qURL string
thisSQS *sqs.SQS
waitTime = int64(20)
binary = "Binary"
valueName = "value"
j *jobber.Jobber
)
// Need to set once.
func SetInfo(queueURL, region *string) {
if queueURL == nil || region == nil {
panic("Info can't be nil.")
}
qURL = *queueURL
thisSQS = sqs.New(session.New(&aws.Config{Region: region}))
j = jobber.New(batchSend, 10)
}
func AddValue(v *Value) {
j.AddJob(v)
}
func batchSend(values []interface{}) bool {
l := len(values)
entries := make([]*sqs.SendMessageBatchRequestEntry, l)
for i := 0; i < l; i++ {
s := strconv.Itoa(i)
value := values[i].(*Value)
var one sqs.SendMessageBatchRequestEntry
one.Id = &s
one.MessageBody = (*value).Key
var mav sqs.MessageAttributeValue
mav.BinaryValue = (*value).V
mav.DataType = &binary
one.MessageAttributes = make(map[string]*sqs.MessageAttributeValue)
one.MessageAttributes[valueName] = &mav
entries[i] = &one
}
params := &sqs.SendMessageBatchInput{
Entries: entries,
QueueUrl: &qURL,
}
if _, err := thisSQS.SendMessageBatch(params); err != nil {
log.Println(err)
return false
}
return true
}