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 }