github.com/wfusion/gofusion@v1.1.14/common/infra/watermill/pubsub/rocketmq/marshaler.go (about)

     1  package rocketmq
     2  
     3  import (
     4  	"github.com/apache/rocketmq-client-go/v2/primitive"
     5  	"github.com/pkg/errors"
     6  
     7  	"github.com/wfusion/gofusion/common/infra/watermill/message"
     8  )
     9  
    10  // Marshaler marshals Watermill's message to Kafka message.
    11  type Marshaler interface {
    12  	Marshal(topic string, msg *message.Message) ([]*primitive.Message, error)
    13  }
    14  
    15  // Unmarshaler unmarshals Kafka's message to Watermill's message.
    16  type Unmarshaler interface {
    17  	Unmarshal([]*primitive.MessageExt) ([]*message.Message, error)
    18  }
    19  
    20  // MarshalerUnmarshaler un/marshaler interface for rocketmq message
    21  type MarshalerUnmarshaler interface {
    22  	Marshaler
    23  	Unmarshaler
    24  }
    25  
    26  // DefaultMarshaler default message mashaler
    27  type DefaultMarshaler struct{}
    28  
    29  // Marshal implement MarshalerUnmarshaler
    30  func (DefaultMarshaler) Marshal(topic string, msg *message.Message) ([]*primitive.Message, error) {
    31  	var rocketmqMsgExts []*primitive.MessageExt
    32  	if len(msg.Payload) > 0 {
    33  		rocketmqMsgExts = primitive.DecodeMessage(msg.Payload)
    34  		if len(rocketmqMsgExts) == 0 {
    35  			return nil, errors.Errorf("empty decoded messages for non-empty msg payload(%s)", msg.UUID)
    36  		}
    37  	}
    38  	var rocketmqMsgs []*primitive.Message
    39  	for _, rocketmqMsgExt := range rocketmqMsgExts {
    40  		rocketmqMsgs = append(rocketmqMsgs, &rocketmqMsgExt.Message)
    41  	}
    42  	if len(rocketmqMsgs) == 0 {
    43  		rocketmqMsg := &primitive.Message{
    44  			Topic: topic,
    45  		}
    46  		if msg.Metadata != nil {
    47  			rocketmqMsg.WithProperties(msg.Metadata)
    48  		}
    49  		rocketmqMsgs = append(rocketmqMsgs, rocketmqMsg)
    50  	}
    51  
    52  	return rocketmqMsgs, nil
    53  }
    54  
    55  // Unmarshal implement MarshalerUnmarshaler
    56  func (DefaultMarshaler) Unmarshal(msgs []*primitive.MessageExt) ([]*message.Message, error) {
    57  	// TODO
    58  	return nil, nil
    59  }