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"` // 组名 // 优先级 Priority uint32 `json:"priority"` // 处理的优先级 // 创建时间 CreateAt time.Time `json:"create_at"` // 创建时间 统一utc // 要排队的数据 Data any `json:"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())) }