Maison > développement back-end > Golang > le corps du texte

amqp.Dial est-il Thread-Safe pour la création de connexion dans Go ? Un débat sur les connexions globales et par requête.

Mary-Kate Olsen
Libérer: 2024-10-28 12:23:02
original
440 Les gens l'ont consulté

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

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal