github.com/qxnw/lib4go@v0.0.0-20180426074627-c80c7e84b925/mq/xmq/xmq.message.go (about) 1 package xmq 2 3 import ( 4 "bytes" 5 "fmt" 6 "strconv" 7 "sync/atomic" 8 "time" 9 10 "strings" 11 12 "github.com/qxnw/lib4go/encoding" 13 "github.com/qxnw/lib4go/jsons" 14 "github.com/qxnw/lib4go/security/md5" 15 ) 16 17 var xmqSEQId int64 = 10000 18 19 type XMQMessage struct { 20 CMD int `json:"cmd"` //0发送 21 Mode int `json:"mod"` //模式是否需要回复:0:需要 1:不需要 22 Timeout int `json:"time"` //超时时长 23 QueueName string `json:"name"` //队列名称 24 SEQ int64 `json:"seq"` //请滶序列号 25 Timestmap int64 `json:"ts"` //时间戳,当前秒数 26 Data []string `json:"data"` //消息数据 27 Sign string `json:"sign"` //签名串 28 signKey string 29 } 30 31 //NewXMQHeartBit 构建消息信息 32 func NewXMQHeartBit() *XMQMessage { 33 34 r := &XMQMessage{ 35 CMD: 99, 36 Mode: 1, 37 Timestmap: time.Now().Unix(), 38 signKey: "sdfsdfsdfdsf", 39 } 40 id := atomic.AddInt64(&xmqSEQId, 1) 41 r.SEQ, _ = strconv.ParseInt(fmt.Sprintf("%d", id), 10, 0) 42 //r.SEQ = r.Timestmap 43 return r 44 } 45 46 //NewXMQMessage 构建消息信息 47 func NewXMQMessage(queueName string, msg string, timeout int) *XMQMessage { 48 49 r := &XMQMessage{ 50 CMD: 0, 51 Mode: 1, 52 QueueName: queueName, 53 Data: []string{msg}, 54 Timeout: timeout * 1000, 55 Timestmap: time.Now().Unix(), 56 signKey: "sdfsdfsdfdsf", 57 } 58 id := atomic.AddInt64(&xmqSEQId, 1) 59 r.SEQ, _ = strconv.ParseInt(fmt.Sprintf("%d", id), 10, 0) 60 // r.SEQ = r.Timestmap 61 return r 62 } 63 64 //MakeMessage 构建消息 65 func (x *XMQMessage) MakeMessage() (string, error) { 66 buff := &bytes.Buffer{} 67 buff.WriteString(strconv.Itoa(x.CMD)) 68 buff.WriteString(fmt.Sprint(x.SEQ)) 69 buff.WriteString(fmt.Sprint(x.Timestmap)) 70 buff.WriteString(fmt.Sprint(x.signKey)) 71 gbkValue, err := encoding.Convert(buff.Bytes(), "gbk") 72 if err != nil { 73 return "", err 74 } 75 x.Sign = strings.ToUpper(md5.EncryptBytes([]byte(gbkValue))) 76 r, err := jsons.Marshal(x) 77 if err != nil { 78 return "", err 79 } 80 return string(r) + "\n", nil 81 }