github.com/goravel/framework@v1.13.9/queue/worker.go (about) 1 package queue 2 3 import ( 4 "github.com/goravel/framework/contracts/log" 5 "github.com/goravel/framework/contracts/queue" 6 ) 7 8 const DriverSync string = "sync" 9 const DriverRedis string = "redis" 10 11 type Worker struct { 12 concurrent int 13 connection string 14 machinery *Machinery 15 jobs []queue.Job 16 queue string 17 } 18 19 func NewWorker(config *Config, log log.Log, concurrent int, connection string, jobs []queue.Job, queue string) *Worker { 20 return &Worker{ 21 concurrent: concurrent, 22 connection: connection, 23 machinery: NewMachinery(config, log), 24 jobs: jobs, 25 queue: queue, 26 } 27 } 28 29 func (receiver *Worker) Run() error { 30 server, err := receiver.machinery.Server(receiver.connection, receiver.queue) 31 if err != nil { 32 return err 33 } 34 if server == nil { 35 return nil 36 } 37 38 jobTasks, err := jobs2Tasks(receiver.jobs) 39 if err != nil { 40 return err 41 } 42 43 if err := server.RegisterTasks(jobTasks); err != nil { 44 return err 45 } 46 47 if receiver.queue == "" { 48 receiver.queue = server.GetConfig().DefaultQueue 49 } 50 if receiver.concurrent == 0 { 51 receiver.concurrent = 1 52 } 53 worker := server.NewWorker(receiver.queue, receiver.concurrent) 54 if err := worker.Launch(); err != nil { 55 return err 56 } 57 58 return nil 59 }