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  }