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  }