|
|
|
package mq
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/json"
|
|
|
|
"fmt"
|
|
|
|
"git.oa00.com/go/jcook-sdk/util/http"
|
|
|
|
"git.oa00.com/go/jcook-sdk/util/security"
|
|
|
|
"net/url"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
const maxSize = "32"
|
|
|
|
const autoAck = "false"
|
|
|
|
|
|
|
|
const (
|
|
|
|
PTopic = "topic"
|
|
|
|
PConsumerGroupID = "consumerGroupId"
|
|
|
|
PSize = "size"
|
|
|
|
PAck = "ack"
|
|
|
|
PAccessKey = "accessKey"
|
|
|
|
PDateTime = "dateTime"
|
|
|
|
PSignature = "signature"
|
|
|
|
PToken = "token"
|
|
|
|
PAckAction = "ackAction"
|
|
|
|
PAckIndex = "ackIndex"
|
|
|
|
)
|
|
|
|
|
|
|
|
type Client struct {
|
|
|
|
AccessKey string
|
|
|
|
SecretKey string
|
|
|
|
}
|
|
|
|
|
|
|
|
func NewClient(ak string, sk string) *Client {
|
|
|
|
return &Client{
|
|
|
|
AccessKey: ak,
|
|
|
|
SecretKey: sk,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
type UrlBase interface {
|
|
|
|
GetTopicName() string
|
|
|
|
GetConsumerGroupID() string
|
|
|
|
GetEndPoint() string
|
|
|
|
}
|
|
|
|
|
|
|
|
func getUTCStr() string {
|
|
|
|
return time.Now().UTC().Format("2006-01-02T15:04:05Z")
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Client) Pull(r UrlBase) ([]byte, error) {
|
|
|
|
mq := fmt.Sprintf("%s/%s/messages", http.FormatUrl(r.GetEndPoint(), true), "v2")
|
|
|
|
value := url.Values{}
|
|
|
|
data := map[string]string{
|
|
|
|
PTopic: r.GetTopicName(),
|
|
|
|
PConsumerGroupID: r.GetConsumerGroupID(),
|
|
|
|
PSize: maxSize,
|
|
|
|
PAck: autoAck,
|
|
|
|
}
|
|
|
|
|
|
|
|
for k, v := range data {
|
|
|
|
value.Set(k, v)
|
|
|
|
}
|
|
|
|
t := getUTCStr()
|
|
|
|
data[PAccessKey] = c.AccessKey
|
|
|
|
data[PDateTime] = t
|
|
|
|
|
|
|
|
sign := security.Sha1OrderlyWithBase64(c.SecretKey, data)
|
|
|
|
|
|
|
|
header := map[string]string{
|
|
|
|
PAccessKey: c.AccessKey,
|
|
|
|
PDateTime: t,
|
|
|
|
PSignature: sign,
|
|
|
|
}
|
|
|
|
|
|
|
|
return http.JGet(mq, value, header)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Client) Ack(r UrlBase, index string, action string) ([]byte, error) {
|
|
|
|
ack := fmt.Sprintf("%s/%s/ack", http.FormatUrl(r.GetEndPoint(), false), "v2")
|
|
|
|
t := getUTCStr()
|
|
|
|
data := map[string]string{
|
|
|
|
PTopic: r.GetTopicName(),
|
|
|
|
PAccessKey: c.AccessKey,
|
|
|
|
PAckAction: action,
|
|
|
|
PAckIndex: index,
|
|
|
|
PConsumerGroupID: r.GetConsumerGroupID(),
|
|
|
|
PDateTime: t,
|
|
|
|
}
|
|
|
|
sign := security.Sha1OrderlyWithBase64(c.SecretKey, data)
|
|
|
|
|
|
|
|
header := map[string]string{
|
|
|
|
PAccessKey: c.AccessKey,
|
|
|
|
PDateTime: t,
|
|
|
|
PSignature: sign,
|
|
|
|
}
|
|
|
|
|
|
|
|
jsonStr, _ := json.Marshal(&data)
|
|
|
|
|
|
|
|
return http.JPostJson(ack, jsonStr, header)
|
|
|
|
}
|