// // queue.go // Copyright (C) 2022 tiglog // // Distributed under terms of the MIT license. // package gqueue import ( "sync" "github.com/hibiken/asynq" ) var onceCli sync.Once var onceSvc sync.Once var redisOpt asynq.RedisClientOpt func Init(addr, username, password string, database int) { redisOpt = asynq.RedisClientOpt{ Addr: addr, Username: username, Password: password, DB: database, } } var cli *asynq.Client func GetClient() *asynq.Client { onceCli.Do(func() { cli = asynq.NewClient(redisOpt) }) return cli } var svc *asynq.Server func GetServerWithArgs(concurrency int, fn asynq.ErrorHandlerFunc) *asynq.Server { onceSvc.Do(func() { svc = asynq.NewServer( redisOpt, asynq.Config{ Concurrency: concurrency, ErrorHandler: fn, }, ) }) return svc } func GetServerWithConfig(cfg asynq.Config) *asynq.Server { onceSvc.Do(func() { svc = asynq.NewServer( redisOpt, cfg, ) }) return svc } func GetServer() *asynq.Server { onceSvc.Do(func() { svc = asynq.NewServer( redisOpt, asynq.Config{ Concurrency: 0, }, ) }) return svc }