// rabbitmq.go package main import ( "log" "github.com/rabbitmq/amqp091-go" ) func ConnectRabbitMQ(cfg Config) (*amqp091.Connection, *amqp091.Channel, error) { conn, err := amqp091.Dial(cfg.RabbitURL) if err != nil { return nil, nil, err } ch, err := conn.Channel() if err != nil { return nil, nil, err } err = ch.Qos(1, 0, false) // Prefetch 1 if err != nil { return nil, nil, err } _, err = ch.QueueDeclare( cfg.QueueName, true, // durable false, // delete when unused false, // exclusive false, // no-wait amqp091.Table{ "x-dead-letter-exchange": "optimize.images.dlx", "x-dead-letter-routing-key": "file.uploaded.failed", "x-delivery-limit": int32(3), "x-queue-type": "quorum", }, ) if err != nil { return nil, nil, err } log.Printf("🎧 Listening to queue: %s", cfg.QueueName) return conn, ch, nil }