github.com/wfusion/gofusion@v1.1.14/common/infra/watermill/message/router/middleware/duplicator.go (about) 1 package middleware 2 3 import ( 4 "github.com/wfusion/gofusion/common/infra/watermill/message" 5 ) 6 7 // Duplicator is processing messages twice, to ensure that the endpoint is idempotent. 8 func Duplicator(h message.HandlerFunc) message.HandlerFunc { 9 return func(msg *message.Message) ([]*message.Message, error) { 10 firstProducedMessages, firstErr := h(msg) 11 if firstErr != nil { 12 return nil, firstErr 13 } 14 15 secondProducedMessages, secondErr := h(msg) 16 if secondErr != nil { 17 return nil, secondErr 18 } 19 20 return append(firstProducedMessages, secondProducedMessages...), nil 21 } 22 }