github.com/sereiner/library@v0.0.0-20200518095232-1fa3e640cc5f/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/sereiner/library/encoding"
    13  	"github.com/sereiner/library/jsons"
    14  	"github.com/sereiner/library/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.DecodeBytes(buff.Bytes(), "gbk")
    72  	if err != nil {
    73  		return "", err
    74  	}
    75  	x.Sign = strings.ToUpper(md5.EncryptBytes(gbkValue))
    76  	r, err := jsons.Marshal(x)
    77  	if err != nil {
    78  		return "", err
    79  	}
    80  	return string(r) + "\n", nil
    81  }