You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

36 line
589 B

  1. package kafkaclient
  2. import (
  3. "context"
  4. "encoding/json"
  5. "fmt"
  6. "sync"
  7. "github.com/segmentio/kafka-go"
  8. )
  9. func Consume[T any](r *kafka.Reader, ch chan<- T, ctx context.Context, wg *sync.WaitGroup) {
  10. defer wg.Done()
  11. for {
  12. select {
  13. case <-ctx.Done():
  14. fmt.Println("consumer closed")
  15. return
  16. default:
  17. msg, err := r.ReadMessage(ctx)
  18. if err != nil {
  19. fmt.Println("error reading message:", err)
  20. continue
  21. }
  22. var data T
  23. if err := json.Unmarshal(msg.Value, &data); err != nil {
  24. fmt.Println("error decoding:", err)
  25. continue
  26. }
  27. ch <- data
  28. }
  29. }
  30. }