91 lines
1.6 KiB
Go
91 lines
1.6 KiB
Go
package rabbitmq
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"git.umbach.dev/app-idea/rest-api/modules/config"
|
|
log "github.com/sirupsen/logrus"
|
|
"github.com/streadway/amqp"
|
|
)
|
|
|
|
var Conn *amqp.Connection
|
|
var MailQueue amqp.Queue
|
|
var Channel *amqp.Channel
|
|
|
|
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 {
|
|
log.Fatalln("Failed to connect to RabbitMQ", err)
|
|
}
|
|
|
|
Conn = conn
|
|
|
|
ch, err := conn.Channel()
|
|
|
|
if err != nil {
|
|
log.Fatalln("Failed to open a channel", err)
|
|
}
|
|
|
|
//defer ch.Close()
|
|
|
|
Channel = ch
|
|
|
|
log.Debug("RabbitMQ connected")
|
|
|
|
q, err := ch.QueueDeclare(
|
|
"mails", // name
|
|
false, // durable
|
|
false, // delete when unused
|
|
false, // exclusive
|
|
false, // no-wait
|
|
nil, // arguments
|
|
)
|
|
|
|
if err != nil {
|
|
log.Fatalln("Failed to declare a queue", err)
|
|
}
|
|
|
|
MailQueue = q
|
|
|
|
body := "Hello World!"
|
|
err = ch.Publish(
|
|
"", // exchange
|
|
q.Name, // routing key
|
|
false, // mandatory
|
|
false, // immediate
|
|
amqp.Publishing{
|
|
ContentType: "text/plain",
|
|
Body: []byte(body),
|
|
})
|
|
|
|
if err != nil {
|
|
log.Fatalln("Failed to publish a message", err)
|
|
}
|
|
}
|
|
|
|
func Publish(body string) {
|
|
log.Infoln("qu name", MailQueue.Name)
|
|
log.Infoln("publish", Channel, MailQueue)
|
|
|
|
err := Channel.Publish(
|
|
"", // exchange
|
|
MailQueue.Name, // routing key
|
|
false, // mandatory
|
|
false, // immediate
|
|
amqp.Publishing{
|
|
ContentType: "application/json",
|
|
Body: []byte(body),
|
|
})
|
|
|
|
if err != nil {
|
|
log.Fatalln("Failed to publish a message", err)
|
|
}
|
|
}
|