github.com/goravel/framework@v1.13.9/queue/machinery.go (about) 1 package queue 2 3 import ( 4 "fmt" 5 6 "github.com/RichardKnop/machinery/v2" 7 redisbackend "github.com/RichardKnop/machinery/v2/backends/redis" 8 redisbroker "github.com/RichardKnop/machinery/v2/brokers/redis" 9 "github.com/RichardKnop/machinery/v2/config" 10 "github.com/RichardKnop/machinery/v2/locks/eager" 11 "github.com/RichardKnop/machinery/v2/log" 12 "github.com/gookit/color" 13 14 logcontract "github.com/goravel/framework/contracts/log" 15 ) 16 17 type Machinery struct { 18 config *Config 19 log logcontract.Log 20 } 21 22 func NewMachinery(config *Config, log logcontract.Log) *Machinery { 23 return &Machinery{config: config, log: log} 24 } 25 26 func (m *Machinery) Server(connection string, queue string) (*machinery.Server, error) { 27 driver := m.config.Driver(connection) 28 29 switch driver { 30 case DriverSync: 31 color.Yellowln("Queue sync driver doesn't need to be run") 32 33 return nil, nil 34 case DriverRedis: 35 return m.redisServer(connection, queue), nil 36 } 37 38 return nil, fmt.Errorf("unknown queue driver: %s", driver) 39 } 40 41 func (m *Machinery) redisServer(connection string, queue string) *machinery.Server { 42 redisConfig, database, defaultQueue := m.config.Redis(connection) 43 if queue == "" { 44 queue = defaultQueue 45 } 46 47 cnf := &config.Config{ 48 DefaultQueue: queue, 49 Redis: &config.RedisConfig{}, 50 } 51 52 broker := redisbroker.NewGR(cnf, []string{redisConfig}, database) 53 backend := redisbackend.NewGR(cnf, []string{redisConfig}, database) 54 lock := eager.New() 55 56 debug := m.config.config.GetBool("app.debug") 57 log.DEBUG = NewDebug(debug, m.log) 58 log.INFO = NewInfo(debug, m.log) 59 log.WARNING = NewWarning(debug, m.log) 60 log.ERROR = NewError(debug, m.log) 61 log.FATAL = NewFatal(debug, m.log) 62 63 return machinery.NewServer(cnf, broker, backend, lock) 64 }