go-kafka消费

45 阅读1分钟
package util

import (
	"fmt"
	// "go_vue_manage/pkg/kafka"
	"os"
	"os/signal"
	"sync"

	"github.com/Shopify/sarama"
)

type KafkaStore struct{

}

func (kafkaStore KafkaStore)ConsumerMsg() bool {


	brokerList := []string{"192.168.1.40:9092"} // 替换为实际的 Kafka 服务器地址
	topic := "test-topic1" // 替换为要消费的 Kafka 主题

	config := sarama.NewConfig()
	config.Consumer.Return.Errors = true

	consumer, err := sarama.NewConsumer(brokerList, config)
	if err != nil {
		panic(err)
	}
	defer func() {
		if err := consumer.Close(); err != nil {
			panic(err)
		}
	}()

	partitions, err := consumer.Partitions(topic)
	if err != nil {
		panic(err)
	}

	signals := make(chan os.Signal, 1)
	signal.Notify(signals, os.Interrupt)

	wg := &sync.WaitGroup{}
	for _, partition := range partitions {
		pc, err := consumer.ConsumePartition(topic, partition, sarama.OffsetNewest)
		if err != nil {
			panic(err)
		}

		wg.Add(1)
		go func(pc sarama.PartitionConsumer) {
			defer wg.Done()
			for {
				select {
				case msg := <-pc.Messages():
					fmt.Printf("Partition: %d, Offset: %d, Key: %s, Value: %s\n",
						msg.Partition, msg.Offset, string(msg.Key), string(msg.Value))
				case err := <-pc.Errors():
					panic(err)
				case <-signals:
					return
				}
			}
		}(pc)
	}

	wg.Wait()
	fmt.Println("Consumer stopped")


	return true

}