diff --git a/src/emailnotification/docker-entrypoint.sh b/src/emailnotification/docker-entrypoint.sh index 09dc0801753b82cf8d1e330ad00d339b6b9541b8..9e499df2a2095fb4dc62ba9e4ab62f1bfb0506b0 100644 --- a/src/emailnotification/docker-entrypoint.sh +++ b/src/emailnotification/docker-entrypoint.sh @@ -1,13 +1,9 @@ #!/bin/sh # Abort on any error (including if wait-for-it fails). set -e -# Wait for DB -if [ -n "$DB_CONNECT" ]; then -/go/src/app/wait-for-it.sh "$DB_CONNECT" -t 20 -fi # Wait for nats if [ -n "$NATS_CONNECT" ]; then -/go/src/app/wait-for-it.sh "$DB_CONNECT" -t 20 +/go/src/app/wait-for-it.sh "$NATS_CONNECT" -t 20 fi # Run the main container command. exec "$@" \ No newline at end of file diff --git a/src/emailnotification/main.go b/src/emailnotification/main.go index 525b46e1049a73ca44dcac2e727ed9c94aff4a25..d7b96ae4e2fbec35adcb3a7a317520a6eb9aa942 100644 --- a/src/emailnotification/main.go +++ b/src/emailnotification/main.go @@ -4,6 +4,8 @@ import ( "fmt" "log" "os" + "sync" + "time" "github.com/joho/godotenv" "github.com/nats-io/nats.go" @@ -11,76 +13,69 @@ import ( func main() { err := godotenv.Load(".env") - if err != nil { - log.Fatalf("Error loading .env file") + log.Fatalf("Error loading .env file: %v", err) } fmt.Println("aufgerufen") - //testemailcontent := model.EmialContenct{Name: "Yannick", Location: "Stuttgart"} - //receiver, body, subject := service.CreateEmail(testemailcontent, "confirmOrder") - //service.SendEmail(receiver, body, subject) + time.Sleep(2 * time.Second) natsUrl := os.Getenv("NATS_URL") - if nc, err := nats.Connect(natsUrl); err != nil { - fmt.Println(err, nc) + nc, err := nats.Connect(natsUrl) + if err != nil { + log.Fatalf("Error connecting to NATS server: %v", err) } + defer nc.Close() + + var wg sync.WaitGroup + + wg.Add(2) go func() { + defer wg.Done() fmt.Println("wird aufgerufen") - nc, err := nats.Connect(natsUrl) + orderSub, err := nc.SubscribeSync("Order") if err != nil { - log.Fatal(err) - } - defer nc.Close() - sub, err := nc.SubscribeSync("Order") - if err != nil { - log.Fatal(err) + log.Fatalf("Error subscribing to 'Order': %v", err) } - - log.Println("Service hört auf die Subscription:", sub.Subject) + log.Println("Service hört auf die Subscription:", orderSub.Subject) for { - msg, err := sub.NextMsg(0) + msg, err := orderSub.NextMsg(-1) if err != nil { - log.Fatal(err) + log.Println("Error receiving message:", err) + continue + } + if msg != nil { + log.Printf("Nachricht erhalten: %s", msg.Data) + msg.Ack() } - log.Printf("Nachricht erhalten: %s", msg.Data) - - // Führe hier deine spezifische Logik aus, um die Nachricht zu verarbeiten - - // Bestätige die Verarbeitung der Nachricht - msg.Ack() } }() go func() { - nc, err := nats.Connect(natsUrl) - if err != nil { - log.Fatal(err) - } - defer nc.Close() - sub, err := nc.SubscribeSync("Cancelation") + defer wg.Done() + cancelationSub, err := nc.SubscribeSync("Cancelation") if err != nil { - log.Fatal(err) + log.Fatalf("Error subscribing to 'Cancelation': %v", err) } - - log.Println("Service hört auf die Subscription:", sub.Subject) + log.Println("Service hört auf die Subscription:", cancelationSub.Subject) for { - msg, err := sub.NextMsg(0) + msg, err := cancelationSub.NextMsg(-1) if err != nil { - log.Fatal(err) + log.Println("Error receiving message:", err) + continue + } + if msg != nil { + log.Printf("Nachricht erhalten: %s", msg.Data) + msg.Ack() } - log.Printf("Nachricht erhalten: %s", msg.Data) - - // Führe hier deine spezifische Logik aus, um die Nachricht zu verarbeiten - - // Bestätige die Verarbeitung der Nachricht - msg.Ack() } }() + wg.Wait() + fmt.Println("Alle Go-Routinen sind abgeschlossen. Hauptprogramm wird beendet.") }