2023-08-02 10:16:05 +00:00
|
|
|
package fusenrender
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/json"
|
|
|
|
"fmt"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
type CmdEnqueue struct {
|
|
|
|
Command
|
|
|
|
Item *QueueItem `json:"item"`
|
|
|
|
}
|
|
|
|
|
|
|
|
type CmdDequeue struct {
|
|
|
|
Command
|
|
|
|
}
|
|
|
|
|
|
|
|
type Command struct {
|
2023-08-02 11:05:23 +00:00
|
|
|
Group string `json:"group"`
|
|
|
|
Version string `json:"version"`
|
2023-08-02 10:16:05 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// func (cmd *Command) Encode() ([]byte, error) {
|
|
|
|
// val, err := json.Marshal(cmd)
|
|
|
|
// if err != nil {
|
|
|
|
// return nil, err
|
|
|
|
// }
|
|
|
|
// return val, nil
|
|
|
|
// }
|
|
|
|
|
|
|
|
// func (cmd *Command) Decode(data []byte) error {
|
|
|
|
|
|
|
|
// err := json.Unmarshal(data, cmd)
|
|
|
|
// return err
|
|
|
|
// }
|
|
|
|
|
|
|
|
// QueueItem表示队列中的一个项
|
|
|
|
type QueueItem struct {
|
2023-08-16 03:42:49 +00:00
|
|
|
Group string `json:"group"` // 队列组名
|
2023-08-03 10:34:20 +00:00
|
|
|
|
2023-08-16 03:42:49 +00:00
|
|
|
Source string `json:"source"` // 标记业务来源
|
2023-08-02 10:16:05 +00:00
|
|
|
// 优先级
|
|
|
|
Priority uint32 `json:"priority"` // 处理的优先级
|
|
|
|
// 创建时间
|
|
|
|
CreateAt time.Time `json:"create_at"` // 创建时间 统一utc
|
|
|
|
// 要排队的数据
|
2023-08-16 03:42:49 +00:00
|
|
|
Data any `json:"render_data"` // 操作的数据结构
|
2023-08-02 10:16:05 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (item *QueueItem) Encode() ([]byte, error) {
|
|
|
|
val, err := json.Marshal(item)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
return val, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (item *QueueItem) Decode(buf []byte) error {
|
|
|
|
err := json.Unmarshal(buf, item)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (item *QueueItem) GetKey() []byte {
|
|
|
|
return []byte(fmt.Sprintf("%s_%d_%d", item.Group, -item.Priority, item.CreateAt.UTC().Unix()))
|
|
|
|
}
|