github.com/artisanhe/tools@v1.0.1-0.20210607022958-19a8fef2eb04/kafka/notify.go (about)

     1  package kafka
     2  
     3  import (
     4  	"encoding/json"
     5  
     6  	"github.com/sirupsen/logrus"
     7  	"gopkg.in/Shopify/sarama.v1"
     8  )
     9  
    10  func SendNotify(client sarama.Client, topic, key string, notify interface{}) error {
    11  	valueBytes, err := json.Marshal(notify)
    12  	if err != nil {
    13  		logrus.Errorf("marshal pay notify request to cashdesk failed![err:%s]", err.Error())
    14  		return err
    15  	}
    16  	message := sarama.ProducerMessage{
    17  		Topic: topic,
    18  		Key:   sarama.StringEncoder(key),
    19  		Value: sarama.ByteEncoder(valueBytes),
    20  	}
    21  
    22  	producer, err := sarama.NewSyncProducerFromClient(client)
    23  	if err != nil {
    24  		logrus.Errorf("new producer from client failed![err:%s]", err.Error())
    25  		return err
    26  	}
    27  
    28  	defer func() {
    29  		if err := producer.Close(); err != nil {
    30  			logrus.Errorf("failed to close producer![err:%s]", err.Error())
    31  		}
    32  	}()
    33  
    34  	partition, offset, err := producer.SendMessage(&message)
    35  	if err != nil {
    36  		logrus.Errorf("failed to send message![err:%s]", err.Error())
    37  		return err
    38  	}
    39  	logrus.Debugf("Kafak Send Topic[%s] Message:[%s]", topic, message)
    40  	logrus.Infof("[key:%s]send message to kafka succeed![partition:%d][offset:%d][topic:%s]", key, partition, offset, topic)
    41  	return nil
    42  }