57 lines
1.6 KiB
Go
57 lines
1.6 KiB
Go
// 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()
|
||
}
|