// Package taskq 提供基于 Redis 的异步任务队列功能 // 使用 asynq 库作为底层实现,支持任务注册、发布、消费和重试机制 // // 本包提供两种使用方式: // 1. 包级别函数:使用全局默认 Servlet,适合单实例场景 // 2. Servlet 实例方法:支持多实例复用,适合需要隔离的场景 package taskq import ( "context" "reflect" ) // 全局默认 Servlet 实例 var defaultServlet = NewServlet() var ( errorType = reflect.TypeOf((*error)(nil)).Elem() // error 类型反射 contextType = reflect.TypeOf((*context.Context)(nil)).Elem() // context.Context 类型反射 ) // Default 返回默认的 Servlet 实例 func Default() *Servlet { return defaultServlet } // SetDefault 设置默认的 Servlet 实例 // 这是一个并发不安全的操作,建议在程序初始化阶段调用 func SetDefault(servlet *Servlet) { defaultServlet = servlet } // Configure 配置默认 Servlet // 必须在 Init 之前调用 func Configure(cfg Config) error { return defaultServlet.Configure(cfg) } // Init 初始化默认 Servlet 和所有插件 // 必须在 Start 之前调用,且只能调用一次 func Init(ctx context.Context) error { return defaultServlet.Init(ctx) } // Start 启动 taskq 服务器(包级别函数,使用默认 Servlet) // 开始监听任务队列并处理任务 // 必须在 Init 之后调用 func Start(ctx context.Context) error { return defaultServlet.Start(ctx) } // Stop 优雅停止 taskq 服务器(包级别函数,使用默认 Servlet) // 发送停止信号并等待服务器完全关闭 func Stop() { defaultServlet.Stop() }