MailerServer/modules/rabbitmq/rabbitmq.go

71 lines
1.2 KiB
Go

package rabbitmq
import (
"fmt"
"clickandjoin.app/emailserver/modules/config"
amqp "github.com/rabbitmq/amqp091-go"
"github.com/sirupsen/logrus"
)
var Conn *amqp.Connection
var Channel *amqp.Channel
const queueMails = "cnj.mails"
func getConnectionString() string {
cfg := &config.Cfg.RabbitMq
return fmt.Sprintf("amqp://%s:%s@%s/", cfg.Username, cfg.Password, cfg.Host)
}
func Init() {
conn, err := amqp.Dial(getConnectionString())
if err != nil {
logrus.Fatalln("RabbitMQ connection failed, err:", err)
}
ch, err := conn.Channel()
if err != nil {
logrus.Fatalln(err)
}
Channel = ch
err = ch.Qos(
1, // prefetch count
0, // prefetch size
false, // global
)
if err != nil {
logrus.Fatalln("Failed to set Qos, err:", err)
}
msgs, err := ch.Consume(
queueMails, // queue
"", // consumer
false, // auto-ack
false, // exclusive
false, // no-local
false, // no-wait
nil, // args
)
if err != nil {
logrus.Fatalln("Failed to consume mails, err:", err)
}
var forever chan struct{}
go func() {
for d := range msgs {
logrus.Printf("Received a message: %s", d.Body)
}
}()
<-forever
}