fusen-render/command.go

68 lines
1.3 KiB
Go
Raw Normal View History

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 {
// 队列组名
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()))
}