|
- package common
-
- import (
- "errors"
-
- "github.com/RichardKnop/machinery/v1/brokers/iface"
- "github.com/RichardKnop/machinery/v1/config"
- "github.com/RichardKnop/machinery/v1/log"
- "github.com/RichardKnop/machinery/v1/retry"
- "github.com/RichardKnop/machinery/v1/tasks"
- )
-
- // Broker represents a base broker structure
- type Broker struct {
- cnf *config.Config
- registeredTaskNames []string
- retry bool
- retryFunc func(chan int)
- retryStopChan chan int
- stopChan chan int
- }
-
- // NewBroker creates new Broker instance
- func NewBroker(cnf *config.Config) Broker {
- return Broker{
- cnf: cnf,
- retry: true,
- stopChan: make(chan int),
- retryStopChan: make(chan int),
- }
- }
-
- // GetConfig returns config
- func (b *Broker) GetConfig() *config.Config {
- return b.cnf
- }
-
- // GetRetry ...
- func (b *Broker) GetRetry() bool {
- return b.retry
- }
-
- // GetRetryFunc ...
- func (b *Broker) GetRetryFunc() func(chan int) {
- return b.retryFunc
- }
-
- // GetRetryStopChan ...
- func (b *Broker) GetRetryStopChan() chan int {
- return b.retryStopChan
- }
-
- // GetStopChan ...
- func (b *Broker) GetStopChan() chan int {
- return b.stopChan
- }
-
- // Publish places a new message on the default queue
- func (b *Broker) Publish(signature *tasks.Signature) error {
- return errors.New("Not implemented")
- }
-
- // SetRegisteredTaskNames sets registered task names
- func (b *Broker) SetRegisteredTaskNames(names []string) {
- b.registeredTaskNames = names
- }
-
- // IsTaskRegistered returns true if the task is registered with this broker
- func (b *Broker) IsTaskRegistered(name string) bool {
- for _, registeredTaskName := range b.registeredTaskNames {
- if registeredTaskName == name {
- return true
- }
- }
- return false
- }
-
- // GetPendingTasks returns a slice of task.Signatures waiting in the queue
- func (b *Broker) GetPendingTasks(queue string) ([]*tasks.Signature, error) {
- return nil, errors.New("Not implemented")
- }
-
- // StartConsuming is a common part of StartConsuming method
- func (b *Broker) StartConsuming(consumerTag string, concurrency int, taskProcessor iface.TaskProcessor) {
- if b.retryFunc == nil {
- b.retryFunc = retry.Closure()
- }
-
- }
-
- // StopConsuming is a common part of StopConsuming
- func (b *Broker) StopConsuming() {
- // Do not retry from now on
- b.retry = false
- // Stop the retry closure earlier
- select {
- case b.retryStopChan <- 1:
- log.WARNING.Print("Stopping retry closure.")
- default:
- }
- // Notifying the stop channel stops consuming of messages
- close(b.stopChan)
- log.WARNING.Print("Stop channel")
- }
-
- // GetRegisteredTaskNames returns registered tasks names
- func (b *Broker) GetRegisteredTaskNames() []string {
- return b.registeredTaskNames
- }
-
- // AdjustRoutingKey makes sure the routing key is correct.
- // If the routing key is an empty string:
- // a) set it to binding key for direct exchange type
- // b) set it to default queue name
- func (b *Broker) AdjustRoutingKey(s *tasks.Signature) {
- if s.RoutingKey != "" {
- return
- }
-
- s.RoutingKey = b.GetConfig().DefaultQueue
- }
|