github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/app/rpc/pendingtx/kafka.go (about) 1 package pendingtx 2 3 import ( 4 "context" 5 "encoding/json" 6 7 "github.com/segmentio/kafka-go" 8 ) 9 10 type KafkaClient struct { 11 Topic string 12 *kafka.Writer 13 } 14 15 func NewKafkaClient(addrs []string, topic string) *KafkaClient { 16 return &KafkaClient{ 17 Topic: topic, 18 Writer: kafka.NewWriter(kafka.WriterConfig{ 19 Brokers: addrs, 20 Topic: topic, 21 Balancer: &kafka.Hash{}, 22 Async: true, 23 }), 24 } 25 } 26 27 func (kc *KafkaClient) SendPending(hash []byte, tx *PendingTx) error { 28 kafkaMsg := PendingMsg{ 29 Topic: kc.Topic, 30 Data: tx, 31 } 32 33 msg, err := json.Marshal(kafkaMsg) 34 if err != nil { 35 return err 36 } 37 38 // Automatic retries and reconnections on errors. 39 return kc.WriteMessages(context.Background(), 40 kafka.Message{ 41 Key: hash, 42 Value: msg, 43 }, 44 ) 45 } 46 47 func (kc *KafkaClient) SendRmPending(hash []byte, tx *RmPendingTx) error { 48 kafkaMsg := RmPendingMsg{ 49 Topic: kc.Topic, 50 Data: tx, 51 } 52 53 msg, err := json.Marshal(kafkaMsg) 54 if err != nil { 55 return err 56 } 57 58 // Automatic retries and reconnections on errors. 59 return kc.WriteMessages(context.Background(), 60 kafka.Message{ 61 Key: hash, 62 Value: msg, 63 }, 64 ) 65 }