github.com/Anderson-Lu/gobox@v0.0.0-20191127065433-3e6c4c2da420/middleware/kafka/kafka_helper.go (about)

     1  package kafka
     2  
     3  import (
     4  	"encoding/json"
     5  	"log"
     6  	"time"
     7  
     8  	"github.com/Shopify/sarama"
     9  )
    10  
    11  type KafkaProducer struct {
    12  	address      []string
    13  	syncProducer sarama.SyncProducer
    14  }
    15  
    16  //实例化kafka
    17  func NewKafkaProducer(address []string) (*KafkaProducer, error) {
    18  	config := sarama.NewConfig()
    19  	config.Producer.Return.Successes = true
    20  	config.Producer.Timeout = 5 * time.Second
    21  	p, err := sarama.NewSyncProducer(address, config)
    22  	if err != nil {
    23  		log.Printf("sarama.NewSyncProducer err, message=%s \n", err)
    24  		return nil, err
    25  	}
    26  	return &KafkaProducer{
    27  		address:      address,
    28  		syncProducer: p,
    29  	}, nil
    30  }
    31  
    32  //同步发送
    33  func (self *KafkaProducer) SyncSend(data interface{}, topic string) (int32, int64, error) {
    34  	bs, err := json.Marshal(data)
    35  	if err != nil {
    36  		return -1, -1, err
    37  	}
    38  	msg := &sarama.ProducerMessage{
    39  		Topic: topic,
    40  		Value: sarama.ByteEncoder(bs),
    41  	}
    42  	part, offset, err := self.syncProducer.SendMessage(msg)
    43  	return part, offset, err
    44  }