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.

65 regels
1.3 KiB

  1. package main
  2. import (
  3. "time"
  4. "fmt"
  5. "github.com/AFASystems/presence/internal/pkg/config"
  6. "github.com/yosssi/gmq/mqtt"
  7. "github.com/yosssi/gmq/mqtt/client"
  8. "github.com/AFASystems/presence/internal/pkg/bridge/mqtthandler"
  9. "github.com/segmentio/kafka-go"
  10. )
  11. func main() {
  12. cfg := config.Load()
  13. cli := client.New(&client.Options{
  14. ErrorHandler: func(err error) {
  15. fmt.Println("Error in initiating MQTT client: ", err)
  16. },
  17. })
  18. defer cli.Terminate()
  19. err := cli.Connect(&client.ConnectOptions{
  20. Network: "tcp",
  21. Address: cfg.MQTTHost,
  22. ClientID: []byte(cfg.MQTTClientID),
  23. UserName: []byte(cfg.MQTTUser),
  24. Password: []byte(cfg.MQTTPass),
  25. })
  26. if err != nil {
  27. fmt.Println("Error comes from here")
  28. panic(err)
  29. }
  30. writer := kafkaWriter("127.0.0.1:9092", "rawbeacons")
  31. defer writer.Close()
  32. err = cli.Subscribe(&client.SubscribeOptions{
  33. SubReqs: []*client.SubReq{
  34. &client.SubReq{
  35. TopicFilter: []byte("publish_out/#"),
  36. QoS: mqtt.QoS0,
  37. Handler: func(topicName, message[]byte) {
  38. mqtthandler.MqttHandler(writer, topicName, message)
  39. },
  40. },
  41. },
  42. })
  43. if err != nil {
  44. panic(err)
  45. }
  46. select {}
  47. }
  48. func kafkaWriter(kafkaURL, topic string) *kafka.Writer {
  49. return &kafka.Writer{
  50. Addr: kafka.TCP(kafkaURL),
  51. Topic: topic,
  52. Balancer: &kafka.LeastBytes{},
  53. BatchSize: 100,
  54. BatchTimeout: 10 * time.Millisecond,
  55. }
  56. }