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  }