Ist amqp.Dial Thread-sicher für die Verbindungserstellung in Go? Eine Debatte über globale und anfragebasierte Verbindungen.

Mary-Kate Olsen
Freigeben: 2024-10-28 12:23:02
Original
369 Leute haben es durchsucht

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

Thread-Sicherheit von amqp.Wählen Sie Go Lang für die Verbindungserstellung ein

Das Erstellen von TCP-Verbindungen für AMQP kann ein teurer Vorgang sein. Um diesem Problem zu begegnen, wurden Kanäle eingeführt. Es kam jedoch zu Diskussionen darüber, ob jedes Mal eine Verbindung erstellt oder einmal global deklariert werden soll.

Frage:

Ein aktuelles Beispiel in der main()-Funktion von Eine Go-Anwendung demonstriert die Erstellung einer Verbindung jedes Mal, wenn eine Nachricht veröffentlicht wird. Dieser Ansatz wirft die Frage auf, ob es angemessener ist, eine global deklarierte Verbindung mit einem Failover-Mechanismus im Falle von Verbindungsabbrüchen zu haben, insbesondere angesichts der angenommenen Thread-Sicherheit von amqp.Dial.

Antwort:

Es ist nicht ratsam, für jede Anfrage eine Verbindung herzustellen. Erwägen Sie stattdessen, die Verbindung zu einer globalen Variablen oder zu einem Teil eines Anwendungskontexts zu machen, der nur einmal beim Start initialisiert wird.

Um Verbindungsfehler zu behandeln, kann amqp.Connection.NotifyClose verwendet werden, um einen Kanal zur Überwachung des Verbindungsstatus zu registrieren . Wenn ein Fehler auftritt, kann die Verbindung mithilfe einer Reconnect-Funktion wiederhergestellt werden.

Beispiel:

<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>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonIst amqp.Dial Thread-sicher für die Verbindungserstellung in Go? Eine Debatte über globale und anfragebasierte Verbindungen.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!