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>
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!