fusen-render/command.go
2023-08-16 11:42:49 +08:00

69 lines
1.3 KiB
Go

package fusenrender
import (
"encoding/json"
"fmt"
"time"
)
type CmdEnqueue struct {
Command
Item *QueueItem `json:"item"`
}
type CmdDequeue struct {
Command
}
type Command struct {
Group string `json:"group"`
Version string `json:"version"`
}
// 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 {
Group string `json:"group"` // 队列组名
Source string `json:"source"` // 标记业务来源
// 优先级
Priority uint32 `json:"priority"` // 处理的优先级
// 创建时间
CreateAt time.Time `json:"create_at"` // 创建时间 统一utc
// 要排队的数据
Data any `json:"render_data"` // 操作的数据结构
}
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()))
}