我正在使用confluent-kafka-go来写kafka消费者
我有两个主题,topic1
和topic2
。将来肯定会增加。
现在,遵循哪些良好的设计模式可以使我的代码保持整洁?
我实现的方式是:
var topicHandler map[string]func([]byte)
func init() {
topicHandler = make(map[string]func([]byte))
topicHandler["topic1"] = handleTopic1
topicHandler["topic2"] = handleTopic2
createConsumers(topicHandler)
}
func createConsumers(topicHandlers map[string]func([]byte)) error {
// ...
// start consumer for all the topics in topicHandlers map key
// ...
// ***** consume from the topic
for {
select {
case sig := <-sigchan:
break
default:
ev := c.Poll(100)
switch e := ev.(type) {
case *kafka.Message:
topicSpecificHanderFunc := topicHandlers[*e.TopicPartition.Topic]
topicSpecificHanderFunc(e.Value)
case kafka.Error:
fmt.Fprintf(os.Stderr, "%% Error: %v: %v\n", e.Code(), e)
}
}
}
return nil
}
func handleTopic1(msg []byte) {
fmt.Printf("%v", string(msg))
}
func handleTopic2(msg []byte) {
fmt.Printf("%v", string(msg))
}
因此,将来,如果有人需要为topic3
写消费者,他将做两件事...
topicHandler["topic3"] = handleTopic3
func handleTopic3(msg []byte) {}
函数来处理topic3的传入消息