Thread Safety d'amqp.Dial in Go Lang pour la création de connexion
La création de connexions TCP pour AMQP peut être une opération coûteuse. Pour résoudre ce problème, des canaux ont été introduits. Cependant, des discussions ont eu lieu quant à savoir s'il fallait créer une connexion à chaque fois ou la déclarer globalement une fois.
Question :
Un exemple récent dans la fonction main() de une application Go démontre la création d'une connexion à chaque fois qu'un message est publié. Cette approche soulève la question de savoir s'il est plus approprié d'avoir une connexion déclarée globalement avec un mécanisme de basculement en cas de fermeture de connexion, en particulier compte tenu de la nature supposée thread-safe d'amqp.Dial.
Réponse :
Il n'est pas conseillé de créer une connexion pour chaque demande. Envisagez plutôt de faire de la connexion une variable globale ou une partie d'un contexte d'application qui n'est initialisé qu'une seule fois au démarrage.
Pour gérer les erreurs de connexion, amqp.Connection.NotifyClose peut être utilisé pour enregistrer un canal afin de surveiller l'état de la connexion. . Lorsqu'une erreur survient, la connexion peut être rétablie à l'aide d'une fonction de reconnexion.
Exemple :
<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>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!