github.com/lingyao2333/mo-zero@v1.4.1/core/queue/multipusher.go (about)

     1  package queue
     2  
     3  import "github.com/lingyao2333/mo-zero/core/errorx"
     4  
     5  // A MultiPusher is a pusher that can push messages to multiple underlying pushers.
     6  type MultiPusher struct {
     7  	name    string
     8  	pushers []Pusher
     9  }
    10  
    11  // NewMultiPusher returns a MultiPusher.
    12  func NewMultiPusher(pushers []Pusher) Pusher {
    13  	return &MultiPusher{
    14  		name:    generateName(pushers),
    15  		pushers: pushers,
    16  	}
    17  }
    18  
    19  // Name returns the name of pusher.
    20  func (pusher *MultiPusher) Name() string {
    21  	return pusher.name
    22  }
    23  
    24  // Push pushes a message into the underlying queue.
    25  func (pusher *MultiPusher) Push(message string) error {
    26  	var batchError errorx.BatchError
    27  
    28  	for _, each := range pusher.pushers {
    29  		if err := each.Push(message); err != nil {
    30  			batchError.Add(err)
    31  		}
    32  	}
    33  
    34  	return batchError.Err()
    35  }