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 }