Mengesan dan Mengendalikan Sambungan RabbitMQ Mati dalam Go
Dalam skrip pengguna RabbitMQ yang disediakan, gangguan dalam operasi pelayan RabbitMQ menyebabkan skrip berjalan tetapi tidak bertindak balas terhadap mesej. Untuk menangani perkara ini, adalah penting untuk mengesan sambungan mati dan sama ada menyambung semula atau menamatkan skrip.
Pustaka asas, streadway/amqp, menawarkan penyelesaian. Jenis amqp.Connection mempunyai kaedah NotifyClose() yang mengembalikan ralat pengangkutan isyarat saluran atau protokol. Dengan menggunakan saluran ini, adalah mungkin untuk mengesan kegagalan sambungan.
Berikut ialah versi terkini skrip yang menggabungkan pengendalian ralat sambungan:
import ( "log" "github.com/streadway/amqp" ) func main() { // Connection loop for { conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/") if err != nil { log.Printf("Failed to connect to RabbitMQ: %v", err) continue } notify := conn.NotifyClose(make(chan *amqp.Error)) ch, err := conn.Channel() if err != nil { log.Printf("Failed to open a channel: %v", err) continue } q, err := ch.QueueDeclare( "test_task_queue", true, false, false, false, nil, ) if err != nil { log.Printf("Failed to declare a queue: %v", err) continue } err = ch.Qos( 1, 0, false, ) if err != nil { log.Printf("Failed to set QoS: %v", err) continue } msgs, err := ch.Consume( q.Name, "", false, false, false, false, nil, ) if err != nil { log.Printf("Failed to register a consumer: %v", err) continue } // Message receive loop for { select { case err := <-notify: // Connection error handling log.Printf("Connection error: %v", err) break // Reconnect case d := <-msgs: // Message handling log.Printf("Received a message: %s", d.Body) d.Ack(false) dot_count := bytes.Count(d.Body, []byte(".")) t := time.Duration(dot_count) time.Sleep(t * time.Second) log.Printf("Done") } } } }
Dalam skrip yang disemak ini, gelung sambungan membalut operasi lain. Dalam gelung terima mesej, pernyataan pilih menyemak kedua-dua saluran ralat dan mesej masuk. Jika ralat sambungan dikesan, ia mencatat ralat dan mencetuskan penyambungan semula. Mekanisme ini memastikan bahawa skrip boleh pulih daripada isu sambungan sementara dan menyambung semula operasi biasa.
Atas ialah kandungan terperinci Bagaimana untuk Mengesan dan Mengendalikan Sambungan RabbitMQ Mati dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!