mediahls/internal/worker/processor.go
2023-12-22 16:51:09 +08:00

55 lines
1.2 KiB
Go

package worker
import (
"context"
"log"
"github.com/go-redis/redis/v8"
"github.com/hibiken/asynq"
"github.com/zhang2092/mediahls/internal/db"
)
const (
QueueCritical = "critical"
QueueDefault = "default"
)
type TaskProcessor interface {
Start() error
ProcessTaskConvertHLS(ctx context.Context, task *asynq.Task) error
}
type RedisTaskProcessor struct {
server *asynq.Server
store db.Store
}
func NewRedisTaskProcessor(redisOpt asynq.RedisClientOpt, store db.Store) TaskProcessor {
logger := NewLogger()
redis.SetLogger(logger)
config := asynq.Config{
Concurrency: 2, // 最大并发数量
Queues: map[string]int{
QueueCritical: 10,
QueueDefault: 5,
},
ErrorHandler: asynq.ErrorHandlerFunc(func(ctx context.Context, task *asynq.Task, err error) {
log.Printf("type: %s\n", task.Type())
log.Printf("payload: %s\n", task.Payload())
log.Printf("process task failed\n")
}),
}
server := asynq.NewServer(redisOpt, config)
return &RedisTaskProcessor{
server: server,
store: store,
}
}
func (processor *RedisTaskProcessor) Start() error {
mux := asynq.NewServeMux()
mux.HandleFunc(TaskConvertHLS, processor.ProcessTaskConvertHLS)
return processor.server.Start(mux)
}