Files
taskq/taskq.go

57 lines
1.6 KiB
Go
Raw Normal View History

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