feat: 优化监控仪表盘 UI
- 添加 appbar 导航栏,支持 Chart/Queues 视图切换 - appbar 切换使用 history API,支持浏览器前进/后退 - 图表视图占满整个可视区域 - queue-modal 共享 appbar 样式 - 修复 queue tab count 字段名大小写问题 - tooltip 跟随鼠标显示在右下方,移除箭头 - 图表 canvas 鼠标样式改为准星 - pause/resume 队列后刷新列表 - example 添加 flag 配置参数
This commit is contained in:
91
task.go
91
task.go
@@ -13,9 +13,8 @@ import (
|
||||
"github.com/rs/xid"
|
||||
)
|
||||
|
||||
// Task 定义泛型任务结构
|
||||
// T 表示任务数据的类型,必须是结构体
|
||||
type Task[T any] struct {
|
||||
// Task 定义任务结构
|
||||
type Task struct {
|
||||
// 公开字段:用户配置
|
||||
Queue string // 任务队列名称
|
||||
Group string // 任务分组
|
||||
@@ -31,49 +30,17 @@ type Task[T any] struct {
|
||||
inputContext bool // 是否需要 context.Context 参数
|
||||
inputData bool // 是否需要数据参数
|
||||
returnError bool // 是否返回 error
|
||||
}
|
||||
|
||||
// PublishOption 任务发布选项函数类型
|
||||
// 用于配置任务发布时的各种选项
|
||||
type PublishOption func() asynq.Option
|
||||
|
||||
// Delay 设置任务延迟执行时间
|
||||
// 参数 d 表示延迟多长时间后执行
|
||||
func Delay(d time.Duration) PublishOption {
|
||||
return func() asynq.Option {
|
||||
return asynq.ProcessIn(d)
|
||||
}
|
||||
}
|
||||
|
||||
// DelayUntil 设置任务在指定时间执行
|
||||
// 参数 t 表示任务执行的具体时间点
|
||||
func DelayUntil(t time.Time) PublishOption {
|
||||
return func() asynq.Option {
|
||||
return asynq.ProcessAt(t)
|
||||
}
|
||||
}
|
||||
|
||||
// TTR 设置任务超时时间
|
||||
// 覆盖任务默认的超时时间配置
|
||||
func TTR(d time.Duration) PublishOption {
|
||||
return func() asynq.Option {
|
||||
return asynq.Timeout(d)
|
||||
}
|
||||
}
|
||||
|
||||
// Retention 设置任务结果保留时间
|
||||
// 任务执行完成后,结果在 Redis 中保留的时间
|
||||
func Retention(d time.Duration) PublishOption {
|
||||
return func() asynq.Option {
|
||||
return asynq.Retention(d)
|
||||
}
|
||||
servlet *Servlet // 所属的 Servlet 实例
|
||||
}
|
||||
|
||||
// Publish 发布任务到队列
|
||||
// 将任务数据序列化后发送到 Redis 队列中等待处理
|
||||
func (t *Task[T]) Publish(ctx context.Context, data T, options ...PublishOption) error {
|
||||
// 获取 asynq 客户端
|
||||
c := client.Load()
|
||||
func (t *Task) Publish(ctx context.Context, data any, options ...PublishOption) error {
|
||||
var c *asynq.Client
|
||||
if t.servlet != nil {
|
||||
c = t.servlet.Client()
|
||||
} else if defaultServlet != nil {
|
||||
c = defaultServlet.Client()
|
||||
}
|
||||
if c == nil {
|
||||
return errors.New("taskq: client not initialized, call SetRedis() first")
|
||||
}
|
||||
@@ -124,7 +91,7 @@ func (t *Task[T]) Publish(ctx context.Context, data T, options ...PublishOption)
|
||||
|
||||
// ProcessTask 处理任务的核心方法
|
||||
// 由 asynq 服务器调用,根据任务配置动态调用处理器函数
|
||||
func (t *Task[T]) ProcessTask(ctx context.Context, tsk *asynq.Task) error {
|
||||
func (t *Task) ProcessTask(ctx context.Context, tsk *asynq.Task) error {
|
||||
var in []reflect.Value
|
||||
|
||||
// 根据配置添加 context.Context 参数
|
||||
@@ -158,3 +125,39 @@ func (t *Task[T]) ProcessTask(ctx context.Context, tsk *asynq.Task) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// PublishOption 任务发布选项函数类型
|
||||
// 用于配置任务发布时的各种选项
|
||||
type PublishOption func() asynq.Option
|
||||
|
||||
// Delay 设置任务延迟执行时间
|
||||
// 参数 d 表示延迟多长时间后执行
|
||||
func Delay(d time.Duration) PublishOption {
|
||||
return func() asynq.Option {
|
||||
return asynq.ProcessIn(d)
|
||||
}
|
||||
}
|
||||
|
||||
// DelayUntil 设置任务在指定时间执行
|
||||
// 参数 t 表示任务执行的具体时间点
|
||||
func DelayUntil(t time.Time) PublishOption {
|
||||
return func() asynq.Option {
|
||||
return asynq.ProcessAt(t)
|
||||
}
|
||||
}
|
||||
|
||||
// TTR 设置任务超时时间
|
||||
// 覆盖任务默认的超时时间配置
|
||||
func TTR(d time.Duration) PublishOption {
|
||||
return func() asynq.Option {
|
||||
return asynq.Timeout(d)
|
||||
}
|
||||
}
|
||||
|
||||
// Retention 设置任务结果保留时间
|
||||
// 任务执行完成后,结果在 Redis 中保留的时间
|
||||
func Retention(d time.Duration) PublishOption {
|
||||
return func() asynq.Option {
|
||||
return asynq.Retention(d)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user