package main import ( "time" "fmt" "github.com/AFASystems/presence/internal/pkg/config" "github.com/yosssi/gmq/mqtt" "github.com/yosssi/gmq/mqtt/client" "github.com/AFASystems/presence/internal/pkg/bridge/mqtthandler" "github.com/segmentio/kafka-go" ) func main() { cfg := config.Load() cli := client.New(&client.Options{ ErrorHandler: func(err error) { fmt.Println("Error in initiating MQTT client: ", err) }, }) defer cli.Terminate() err := cli.Connect(&client.ConnectOptions{ Network: "tcp", Address: cfg.MQTTHost, ClientID: []byte(cfg.MQTTClientID), UserName: []byte(cfg.MQTTUser), Password: []byte(cfg.MQTTPass), }) if err != nil { fmt.Println("Error comes from here") panic(err) } writer := kafkaWriter("127.0.0.1:9092", "rawbeacons") defer writer.Close() err = cli.Subscribe(&client.SubscribeOptions{ SubReqs: []*client.SubReq{ &client.SubReq{ TopicFilter: []byte("publish_out/#"), QoS: mqtt.QoS0, Handler: func(topicName, message[]byte) { mqtthandler.MqttHandler(writer, topicName, message) }, }, }, }) if err != nil { panic(err) } select {} } func kafkaWriter(kafkaURL, topic string) *kafka.Writer { return &kafka.Writer{ Addr: kafka.TCP(kafkaURL), Topic: topic, Balancer: &kafka.LeastBytes{}, BatchSize: 100, BatchTimeout: 10 * time.Millisecond, } }