Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Skrip Go Boleh Mengesan dan Pulih daripada Kebuntuan RabbitMQ?
Menyalin Pengesanan Kebuntuan RABBITMQ dalam Skrip Go
Seorang pengguna menghadapi isu di mana skrip pengguna Go menggunakan pustaka streadway/amqp kekal tidak bertindak balas apabila penutupan pelayan RabbitMQ, dan mesej kekal tidak dihantar apabila pelayan dimulakan semula. Ini menimbulkan persoalan: bagaimanakah kita boleh mengesan sambungan pengguna yang mati dan menyambung semula atau menamatkan skrip pengguna?
Untuk menguraikan ini, kami menyelidiki mekanisme degupan jantung di perpustakaan. Selang degupan jantung ditetapkan kepada 10 saat secara lalai. Walau bagaimanapun, fungsi degupan jantung ini tidak didedahkan dalam API, menjadikannya tidak tersedia untuk kegunaan eksplisit.
Sebaliknya, pendekatan yang disyorkan ialah menggunakan kaedah NotifyClose() amqp.Connection, yang mengembalikan pengangkutan isyarat saluran atau ralat protokol. Dengan mencipta gelung untuk menyambung semula secara berterusan, kami boleh memastikan pengguna kami kekal aktif dan responsif terhadap perubahan pelayan.
Contoh pelaksanaan pendekatan ini adalah seperti berikut:
for { // Establish the connection conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/") if err != nil { // Handle the error and retry } // Register for connection closure notifications notify := conn.NotifyClose(make(chan *amqp.Error)) // Create a channel and consumer ch, err := conn.Channel() if err != nil { // Handle the error } msgs, err := ch.Consume(...) for { select { case err := <-notify: // Handle the connection error and reconnect case d := <-msgs: // Process the message } } }
Dengan menggabungkan ini mekanisme pengendalian ralat, skrip pengguna kami boleh mengendalikan gangguan sambungan dan memastikan penghantaran mesej berterusan walaupun dalam persekitaran pelayan dinamik.
Atas ialah kandungan terperinci Bagaimanakah Skrip Go Boleh Mengesan dan Pulih daripada Kebuntuan RabbitMQ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!