github.com/openimsdk/tools@v0.0.49/mq/kafka/util.go (about) 1 package kafka 2 3 import ( 4 "context" 5 "errors" 6 "github.com/IBM/sarama" 7 "github.com/openimsdk/protocol/constant" 8 "github.com/openimsdk/tools/mcontext" 9 ) 10 11 var errEmptyMsg = errors.New("kafka binary msg is empty") 12 13 // GetMQHeaderWithContext extracts message queue headers from the context. 14 func GetMQHeaderWithContext(ctx context.Context) ([]sarama.RecordHeader, error) { 15 operationID, opUserID, platform, connID, err := mcontext.GetCtxInfos(ctx) 16 if err != nil { 17 return nil, err 18 } 19 return []sarama.RecordHeader{ 20 {Key: []byte(constant.OperationID), Value: []byte(operationID)}, 21 {Key: []byte(constant.OpUserID), Value: []byte(opUserID)}, 22 {Key: []byte(constant.OpUserPlatform), Value: []byte(platform)}, 23 {Key: []byte(constant.ConnID), Value: []byte(connID)}, 24 }, nil 25 } 26 27 // GetContextWithMQHeader creates a context from message queue headers. 28 func GetContextWithMQHeader(header []*sarama.RecordHeader) context.Context { 29 var values []string 30 for _, recordHeader := range header { 31 values = append(values, string(recordHeader.Value)) 32 } 33 return mcontext.WithMustInfoCtx(values) // Attach extracted values to context 34 }