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  }