Files
taskq/taskq.go

57 lines
1.6 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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()
}