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 }