Skip to content
Snippets Groups Projects
Commit 389213ce authored by Yege1893's avatar Yege1893
Browse files

nats implemented

parent 512e624d
No related branches found
No related tags found
1 merge request!4Master
......@@ -2,4 +2,4 @@
EMAIL_PW=NEMOWeiß1!
EMAIL_ADRESS=Yannick.ege@web.de
NATS_URL=nats://nats:4222
\ No newline at end of file
NATS_URI=nats://nats:4222
\ No newline at end of file
......@@ -2,7 +2,7 @@ FROM golang:1.20-buster
# non-go modules dependencies
RUN apt update
# copy code and protobuf
# copy code
WORKDIR /go/src/app
COPY ./emailnotification .
......@@ -12,6 +12,7 @@ RUN go install
RUN wget https://raw.githubusercontent.com/vishnubob/wait-for-it/81b1373f17855a4dc21156cfe1694c31d7d1792e/wait-for-it.sh
RUN chmod +x ./wait-for-it.sh ./docker-entrypoint.sh
ENTRYPOINT ["./docker-entrypoint.sh"]
CMD ["emailnotification"]
EXPOSE 8001
\ No newline at end of file
package main
import (
"encoding/json"
"fmt"
"log"
"os"
"sync"
"time"
"net/http"
"github.com/joho/godotenv"
"github.com/nats-io/nats.go"
"gitlab.reutlingen-university.de/ege/highlander-ticketing-go-ss2023/src/emailnotification/model"
"gitlab.reutlingen-university.de/ege/highlander-ticketing-go-ss2023/src/emailnotification/service"
)
func main() {
err := godotenv.Load(".env")
nc, err := service.ConnectToNats()
if err != nil {
log.Fatalf("Error loading .env file: %v", err)
log.Fatalf("unable to connect to nats", err)
}
fmt.Println("aufgerufen")
time.Sleep(2 * time.Second)
natsUrl := os.Getenv("NATS_URL")
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")
orderSub, err := nc.SubscribeSync("Order")
if err != nil {
log.Fatalf("Error subscribing to 'Order': %v", err)
}
log.Println("Service hört auf die Subscription:", orderSub.Subject)
for {
msg, err := orderSub.NextMsg(-1)
if err != nil {
log.Println("Error receiving message:", err)
continue
}
if msg != nil {
log.Printf("Nachricht erhalten: %s", msg.Data)
msg.Ack()
}
nc.Subscribe("confirmOrder", func(m *nats.Msg) {
var (
req model.EmialContent
res model.Response
)
if err := json.Unmarshal(m.Data, &req); err != nil {
panic(err)
}
}()
// hier email verschicken auslösen, wenn kein error --> dann response tru verschicken
go func() {
defer wg.Done()
cancelationSub, err := nc.SubscribeSync("Cancelation")
if err != nil {
log.Fatalf("Error subscribing to 'Cancelation': %v", err)
res.Send = true
e, errMarshal := json.Marshal(res)
if errMarshal != nil {
fmt.Println(errMarshal)
return
}
log.Println("Service hört auf die Subscription:", cancelationSub.Subject)
for {
msg, err := cancelationSub.NextMsg(-1)
if err != nil {
log.Println("Error receiving message:", err)
continue
}
if msg != nil {
log.Printf("Nachricht erhalten: %s", msg.Data)
msg.Ack()
}
nc.Publish(m.Reply, []byte(e))
})
nc.Subscribe("confirmCancel", func(m *nats.Msg) {
var (
req model.EmialContent
res model.Response
)
if err := json.Unmarshal(m.Data, &req); err != nil {
panic(err)
}
res.Send = true
e, errMarshal := json.Marshal(res)
if errMarshal != nil {
fmt.Println(errMarshal)
return
}
nc.Publish(m.Reply, []byte(e))
})
}()
wg.Wait()
if err := http.ListenAndServe(":8181", nil); err != nil {
log.Fatal(err)
}
fmt.Println("Alle Go-Routinen sind abgeschlossen. Hauptprogramm wird beendet.")
}
package model
type EmialContenct struct {
Name string
AwayMatch bool
Location string
Date string
Emailadress string
type EmialContent struct {
Name string `json:"name"`
AwayMatch bool `json:"awaymatch"`
Location string `json:"location"`
Date string `json:"date"`
Emailadress string `json:"emailadress"`
}
package model
type Response struct {
Send bool `json:"send"`
}
......@@ -12,7 +12,7 @@ import (
"gitlab.reutlingen-university.de/ege/highlander-ticketing-go-ss2023/src/emailnotification/model"
)
func CreateEmail(emailContenct model.EmialContenct, subject string) (string, string, string) {
func CreateEmail(emailContenct model.EmialContent, subject string) (string, string, string) {
if subject == "confirmOrder" {
return emailContenct.Emailadress, fmt.Sprintf("Hallo Herr/Frau, %s\r\nHiermit bestaetigen wird deine Bestellung fuer das VFB Spiel in %s, am %s", emailContenct.Name, emailContenct.Location, emailContenct.Date), "Confirm Cancelation"
}
......
package service
import (
"log"
"os"
"github.com/joho/godotenv"
"github.com/nats-io/nats.go"
)
func ConnectToNats() (*nats.Conn, error) {
if err := godotenv.Load(".env"); err != nil {
log.Fatalf("Error loading .env file")
}
uri := os.Getenv("NATS_URI")
var err error
var nc *nats.Conn
nc, err = nats.Connect(uri)
if err != nil {
log.Fatal("Error establishing connection to NATS:", err)
}
return nc, nil
}
NATS_URL=nats://nats:4222
\ No newline at end of file
NATS_URI=nats://nats:4222
\ No newline at end of file
......@@ -4,7 +4,6 @@ import (
"fmt"
"net/http"
"os"
"time"
"github.com/gorilla/mux"
"github.com/joho/godotenv"
......@@ -12,6 +11,8 @@ import (
log "github.com/sirupsen/logrus"
"gitlab.reutlingen-university.de/ege/highlander-ticketing-go-ss2023/src/highlanderticketing/db"
"gitlab.reutlingen-university.de/ege/highlander-ticketing-go-ss2023/src/highlanderticketing/handler"
"gitlab.reutlingen-university.de/ege/highlander-ticketing-go-ss2023/src/highlanderticketing/model"
"gitlab.reutlingen-university.de/ege/highlander-ticketing-go-ss2023/src/highlanderticketing/service"
)
func main() {
......@@ -21,22 +22,33 @@ func main() {
fmt.Println(userArray)
service.DeleteAllMatches()
api.GetMatchesOfApiToDb("https://api.openligadb.de/getmatchesbyteamid/16/5/0")*/
//init db
if err := godotenv.Load(".env"); err != nil {
log.Fatalf("Error loading .env file")
}
natsUrl := os.Getenv("NATS_URL")
nc, _ := nats.Connect(natsUrl)
rep, _ := nc.Request("Order", nil, time.Second)
fmt.Println("hier die response", rep)
_, err := db.GetMongoClient()
if err != nil {
log.Fatal(err)
}
var natsServer service.NatsServer
uri := os.Getenv("NATS_URI")
nc, err := nats.Connect(uri)
if err == nil {
natsServer.Nc = nc
}
if err != nil {
log.Fatal("Error establishing connection to NATS:", err)
}
fmt.Println("Connected to NATS at:", natsServer.Nc.ConnectedUrl())
e := model.EmialContent{Name: "aa", AwayMatch: true, Location: "ss", Date: "aaa", Emailadress: "aaa"}
natsServer.ConfirmOrder(&e)
log.Println("Starting Highlander Ticketing server")
router := mux.NewRouter()
router.HandleFunc("/login", handler.HandleLogin).Methods("GET")
......
package model
type EmialContent struct {
string
Name string
AwayMatch bool
Location string
Date string
Name string `json:"name"`
AwayMatch bool `json:"awaymatch"`
Location string `json:"location"`
Date string `json:"date"`
Emailadress string `json:"emailadress"`
}
package model
type Response struct {
Send bool `json:"send"`
}
package service
import (
"encoding/json"
"fmt"
"log"
"time"
"github.com/nats-io/nats.go"
"gitlab.reutlingen-university.de/ege/highlander-ticketing-go-ss2023/src/highlanderticketing/model"
)
type NatsServer struct {
Nc *nats.Conn
}
func (s NatsServer) ConfirmOrder(e *model.EmialContent) {
emailContenct, errMarshal := json.Marshal(e)
if errMarshal != nil {
fmt.Println(errMarshal)
return
}
response, err := s.Nc.Request("confirmOrder", []byte(emailContenct), 2*time.Second)
if err != nil {
log.Println("Error making NATS request:", err)
}
fmt.Println("hier die nats response", string(response.Data))
}
// hier dann confirm cancel
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment