github.com/tuingking/flamingo@v0.0.0-20220403134817-2796ae0e84ca/cmd/consumer/main.go (about) 1 package main 2 3 import ( 4 "context" 5 "fmt" 6 "sync" 7 "time" 8 9 "github.com/pkg/errors" 10 "github.com/segmentio/kafka-go" 11 "github.com/sirupsen/logrus" 12 ) 13 14 var wg sync.WaitGroup 15 16 const topic = "payment.success" 17 18 func main() { 19 20 wg.Add(3) 21 22 go func() { 23 consumer1(topic) 24 wg.Done() 25 }() 26 27 go func() { 28 consumer2(topic) 29 wg.Done() 30 }() 31 32 // go func() { 33 // consumer3(topic) 34 // wg.Done() 35 // }() 36 37 // go func() { 38 // consumer4(topic) 39 // wg.Done() 40 // }() 41 42 wg.Wait() 43 } 44 45 func consumer1(topic string) { 46 logrus.Info("Start Consumer 1") 47 r := kafka.NewReader(kafka.ReaderConfig{ 48 Brokers: []string{"localhost:9092"}, 49 GroupID: "shipping", 50 Topic: topic, 51 // Partition: 0, 52 StartOffset: kafka.LastOffset, 53 // Logger: kafka.LoggerFunc(logInfof), 54 // ErrorLogger: kafka.LoggerFunc(logErrorf), 55 }) 56 defer r.Close() 57 58 for { 59 m, err := r.ReadMessage(context.Background()) 60 if err != nil { 61 logrus.Error(errors.Wrap(err, "read message")) 62 break 63 } 64 65 logrus.Infof("[CONSUMER-02] GroupID: %v, GroupTopic: %v", r.Config().GroupID, r.Config().GroupTopics) 66 logrus.Infof("[CONSUMER-02] Lag: %v", r.Stats().Lag) 67 logrus.Infof("[CONSUMER-01] p:%v offset:%v key:%s val:%s\n", m.Partition, m.Offset, string(m.Key), string(m.Value)) 68 } 69 70 logrus.Info("End Consumer 1") 71 } 72 73 func consumer2(topic string) { 74 75 r := kafka.NewReader(kafka.ReaderConfig{ 76 Brokers: []string{"localhost:9092"}, 77 GroupID: "shipping", 78 Topic: topic, 79 // Partition: 1, 80 StartOffset: kafka.LastOffset, 81 // MinBytes: 5, 82 // MaxBytes: 1e6, 83 // wait for at most 3 seconds before receiving new data 84 MaxWait: 1 * time.Millisecond, 85 // Logger: kafka.LoggerFunc(logInfof), 86 // ErrorLogger: kafka.LoggerFunc(logErrorf), 87 }) 88 defer r.Close() 89 90 for { 91 m, err := r.ReadMessage(context.Background()) 92 if err != nil { 93 logrus.Error(errors.Wrap(err, "read message")) 94 break 95 } 96 97 logrus.Infof("[CONSUMER-02] GroupID: %v, GroupTopic: %v, Topic: %v", r.Config().GroupID, r.Config().GroupTopics, r.Config().Topic) 98 logrus.Infof("[CONSUMER-02] Lag: %v", r.Stats().Lag) 99 logrus.Infof("[CONSUMER-02] p:%v offset:%v key:%s val:%s\n", m.Partition, m.Offset, string(m.Key), string(m.Value)) 100 } 101 102 logrus.Info("End Consumer 2") 103 } 104 105 func consumer3(topic string) { 106 logrus.Info("Start Consumer 3") 107 r := kafka.NewReader(kafka.ReaderConfig{ 108 Brokers: []string{"localhost:9092"}, 109 GroupID: "shipping", 110 Topic: topic, 111 // Partition: 1, 112 StartOffset: kafka.LastOffset, 113 // MinBytes: 5, 114 // MaxBytes: 1e6, 115 // wait for at most 3 seconds before receiving new data 116 MaxWait: 1 * time.Millisecond, 117 // Logger: kafka.LoggerFunc(logInfof), 118 // ErrorLogger: kafka.LoggerFunc(logErrorf), 119 }) 120 defer r.Close() 121 122 for { 123 m, err := r.ReadMessage(context.Background()) 124 if err != nil { 125 logrus.Error(errors.Wrap(err, "read message")) 126 break 127 } 128 129 logrus.Infof("[CONSUMER-03] p:%v offset:%v key:%s val:%s\n", m.Partition, m.Offset, string(m.Key), string(m.Value)) 130 } 131 132 logrus.Info("End Consumer 3") 133 } 134 135 func consumer4(topic string) { 136 logrus.Info("Start Consumer 4") 137 r := kafka.NewReader(kafka.ReaderConfig{ 138 Brokers: []string{"localhost:9092"}, 139 GroupID: "shipping", 140 Topic: topic, 141 // Partition: 1, 142 StartOffset: kafka.LastOffset, 143 // MinBytes: 5, 144 // MaxBytes: 1e6, 145 // wait for at most 3 seconds before receiving new data 146 MaxWait: 1 * time.Millisecond, 147 // Logger: kafka.LoggerFunc(logInfof), 148 // ErrorLogger: kafka.LoggerFunc(logErrorf), 149 }) 150 defer r.Close() 151 152 for { 153 m, err := r.ReadMessage(context.Background()) 154 if err != nil { 155 logrus.Error(errors.Wrap(err, "read message")) 156 break 157 } 158 159 logrus.Infof("[CONSUMER-04] p:%v offset:%v key:%s val:%s\n", m.Partition, m.Offset, string(m.Key), string(m.Value)) 160 } 161 162 logrus.Info("End Consumer 4") 163 } 164 165 func logInfof(msg string, a ...interface{}) { 166 logrus.Infof(msg, a...) 167 fmt.Println() 168 } 169 170 func logErrorf(msg string, a ...interface{}) { 171 logrus.Errorf(msg, a...) 172 fmt.Println() 173 }