github.com/angryronald/go-kit@v0.0.0-20240505173814-ff2bd9c79dbf/test/docker/kafka/kafka.sample.cp.go (about) 1 package kafka 2 3 // uncomment to test this [Not Working] 4 5 // package main 6 7 // import ( 8 // "fmt" 9 // "log" 10 // "os" 11 // "os/signal" 12 // "syscall" 13 // 14 // 15 // 16 17 // "github.com/IBM/sarama" 18 // "github.com/ory/dockertest/v3" 19 // "github.com/ory/dockertest/v3/docker" 20 // ) 21 22 // func main() { 23 // // Create a new pool of Docker containers 24 // pool, err := dockertest.NewPool("") 25 // if err != nil { 26 // log.Fatalf("Could not connect to Docker: %s", err) 27 // } 28 29 // // Set up options for Kafka container 30 // options := &dockertest.RunOptions{ 31 // Repository: "confluentinc/cp-kafka", 32 // Tag: "6.2.1", 33 // PortBindings: map[docker.Port][]docker.PortBinding{ 34 // "9092/tcp": { 35 // {HostIP: "", HostPort: "9092"}, 36 // }, 37 // }, 38 // Env: []string{ 39 // "KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092", 40 // "KAFKA_AUTO_CREATE_TOPICS_ENABLE=false", 41 // "KAFKA_DELETE_TOPIC_ENABLE=true", 42 // }, 43 // ExposedPorts: []string{"9092/tcp"}, 44 // } 45 46 // // Run Kafka container 47 // resource, err := pool.RunWithOptions(options) 48 // if err != nil { 49 // log.Fatalf("Could not start Kafka container: %s", err) 50 // } 51 // defer func() { 52 // // Clean up and remove the Kafka container when done 53 // if err := pool.Purge(resource); err != nil { 54 // log.Fatalf("Could not purge Kafka container: %s", err) 55 // } 56 // }() 57 58 // // Wait for Kafka to be ready with an extended timeout 59 // // maxWait := 120 * time.Second // Adjust the timeout as needed 60 // if err := pool.Retry(func() error { 61 // // Set up a Kafka producer and try to produce a message 62 // producer, err := sarama.NewAsyncProducer([]string{"localhost:9092"}, nil) 63 // if err != nil { 64 // log.Printf("Error creating Kafka producer: %v", err) 65 // return err 66 // } 67 // defer func() { 68 // // Close the producer when done 69 // if err := producer.Close(); err != nil { 70 // log.Printf("Error closing Kafka producer: %v", err) 71 // } 72 // }() 73 74 // // Produce a test message 75 // producer.Input() <- &sarama.ProducerMessage{Topic: "test", Value: sarama.StringEncoder("test-message")} 76 77 // // Check if the message was successfully produced 78 // select { 79 // case err := <-producer.Errors(): 80 // log.Printf("Error producing message: %v", err) 81 // return err.Err 82 // case <-producer.Successes(): 83 // log.Println("Kafka is ready.") 84 // return nil 85 // } 86 // }); err != nil { 87 // log.Fatalf("Could not connect to Kafka: %s", err) 88 // } 89 90 // // At this point, Kafka should be running and ready to use. 91 92 // // You can use the Sarama Kafka client to interact with Kafka. 93 // // For example, you can create a Kafka producer and consumer and perform operations: 94 95 // // Create a Kafka producer 96 // producer, err := sarama.NewAsyncProducer([]string{"localhost:9092"}, nil) 97 // if err != nil { 98 // log.Fatalf("Could not create Kafka producer: %s", err) 99 // } 100 // defer func() { 101 // // Close the producer when done 102 // if err := producer.Close(); err != nil { 103 // log.Printf("Error closing Kafka producer: %v", err) 104 // } 105 // }() 106 107 // // Create a Kafka consumer 108 // consumer, err := sarama.NewConsumer([]string{"localhost:9092"}, nil) 109 // if err != nil { 110 // log.Fatalf("Could not create Kafka consumer: %s", err) 111 // } 112 // defer func() { 113 // // Close the consumer when done 114 // if err := consumer.Close(); err != nil { 115 // log.Printf("Error closing Kafka consumer: %v", err) 116 // } 117 // }() 118 119 // // Subscribe to a Kafka topic and consume messages 120 121 // // Handle signals to gracefully shut down the program 122 // signals := make(chan os.Signal, 1) 123 // signal.Notify(signals, syscall.SIGINT, syscall.SIGTERM) 124 // <-signals 125 126 // fmt.Println("Shutting down Kafka...") 127 // }