package kafka import ( "context" "git.hlsq.asia/mmorpg/service-common/log" "github.com/IBM/sarama" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/propagation" ) func NewProducer() *Producer { return &Producer{} } type Producer struct { } func (c *Producer) Produce(ctx context.Context, topic, value string) { msg := &sarama.ProducerMessage{ Topic: topic, Value: sarama.StringEncoder(value), Headers: make([]sarama.RecordHeader, 0), } // 注入链路信息 carrier := propagation.MapCarrier{} otel.GetTextMapPropagator().Inject(ctx, carrier) for k, v := range carrier { msg.Headers = append(msg.Headers, sarama.RecordHeader{Key: []byte(k), Value: []byte(v)}) } client.producer.Input() <- msg } func producerError() { for err := range client.producer.Errors() { log.Errorf("kafka producer error: %v", err) } }