Rumah >pembangunan bahagian belakang >Golang >Adakah amqp.Dial Thread-Selamat untuk Penciptaan Sambungan dalam Go? Perbahasan mengenai Sambungan Global lwn Per-Permintaan.

Adakah amqp.Dial Thread-Selamat untuk Penciptaan Sambungan dalam Go? Perbahasan mengenai Sambungan Global lwn Per-Permintaan.

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-28 12:23:02446semak imbas

 Is amqp.Dial Thread-Safe for Connection Creation in Go? A Debate on Global vs. Per-Request Connections.

Keselamatan Benang amqp.Dail dalam Go Lang untuk Penciptaan Sambungan

Mencipta sambungan TCP untuk AMQP boleh menjadi operasi yang mahal. Untuk mengatasinya, saluran telah diperkenalkan. Walau bagaimanapun, perbincangan telah timbul sama ada untuk membuat sambungan setiap kali atau mengisytiharkannya secara global sekali.

Soalan:

Contoh terkini dalam fungsi utama() bagi aplikasi Go menunjukkan penciptaan sambungan setiap kali mesej diterbitkan. Pendekatan ini menimbulkan persoalan sama ada lebih sesuai untuk mempunyai sambungan yang diisytiharkan secara global dengan mekanisme failover sekiranya berlaku penutupan sambungan, terutamanya dengan mengambil kira sifat selamat benang amqp.Dial yang diandaikan.

Jawapan:

Adalah tidak digalakkan untuk membuat sambungan untuk setiap permintaan. Sebaliknya, pertimbangkan untuk menjadikan sambungan pembolehubah global atau sebahagian daripada konteks aplikasi yang dimulakan sekali sahaja semasa permulaan.

Untuk mengendalikan ralat sambungan, amqp.Connection.NotifyClose boleh digunakan untuk mendaftarkan saluran bagi memantau status sambungan . Apabila ralat berlaku, sambungan boleh diwujudkan semula menggunakan fungsi sambung semula.

Contoh:

<code class="go">import (
    "github.com/streadway/amqp"
)

func initialize() {
    c := make(chan *amqp.Error)
    go func() {
        err := <-c
        log.Println("reconnect: " + err.Error())
        initialize()
    }()

    conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
    if err != nil {
        panic("cannot connect")
    }
    conn.NotifyClose(c)

    // create topology
}</code>

Atas ialah kandungan terperinci Adakah amqp.Dial Thread-Selamat untuk Penciptaan Sambungan dalam Go? Perbahasan mengenai Sambungan Global lwn Per-Permintaan.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn