Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Go Consumers Boleh Mengesan dan Mengendalikan Sambungan RabbitMQ Mati?
Dalam skrip pengguna RabbitMQ, adalah penting untuk mengesan apabila sambungan ke pelayan RabbitMQ mati. Jika tidak, pengguna mungkin gagal menerima mesej atau terus berjalan selama-lamanya.
Pustaka Streadway/amqp yang digunakan dalam skrip pengguna RabbitMQ menyediakan mekanisme degupan jantung yang cuba mengekalkan sambungan hidup. Walau bagaimanapun, bergantung semata-mata pada selang degupan jantung mungkin tidak mencukupi untuk mengesan sambungan mati dengan pasti.
Sebaliknya, pendekatan yang lebih mantap melibatkan penggunaan kaedah NotifyClose() bagi objek amqp.Connection. Kaedah ini mengembalikan saluran yang memberi isyarat apabila ralat pengangkutan atau protokol berlaku:
import "github.com/rabbitmq/amqp091-go" func main() { conn, err := amqp.Dial(...) notify := conn.NotifyClose(make(chan *amqp.Error)) ... }
Di dalam fungsi utama, apabila sambungan diwujudkan atau diwujudkan semula, anda harus mencipta saluran pemberitahuan baharu dan memulakan pilihan pernyataan yang memantau kedua-dua saluran ralat dan saluran mesej. Jika ralat diterima pada saluran ralat, ini bermakna sambungan telah mati dan skrip harus cuba menyambung semula.
Berikut ialah contoh cara melaksanakan gelung penyambungan semula ini:
for { conn, _ := amqp.Dial(...) notify := conn.NotifyClose(make(chan *amqp.Error)) ch, _ := conn.Channel() msgs, _ := ch.Consume(...) for { select { case err := <-notify: // Handle connection error and reconnect case d := <-msgs: // Handle incoming message } } }
Dengan terus memantau saluran ralat sambungan menggunakan NotifyClose(), anda boleh memastikan bahawa skrip pengguna anda kekal responsif dan mengendalikan kegagalan sambungan dengan anggun. Dengan cara ini, skrip akan menyambung semula secara automatik ke pelayan RabbitMQ apabila perlu, mengurangkan risiko kehilangan mesej atau terhenti sebelum waktunya.
Atas ialah kandungan terperinci Bagaimanakah Go Consumers Boleh Mengesan dan Mengendalikan Sambungan RabbitMQ Mati?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!