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 }