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

Golang et RabbitMQ implémentent le découplage et le découplage des messages dans l'architecture des microservices

WBOY
Libérer: 2023-09-27 15:40:55
original
842 Les gens l'ont consulté

Golang et RabbitMQ implémentent le découplage et le découplage des messages dans larchitecture des microservices

Golang et RabbitMQ implémentent le découplage et le découplage des messages dans l'architecture des microservices

Dans le développement de logiciels modernes, l'architecture des microservices est devenue l'un des modèles d'architecture de plus en plus populaires. Dans cette architecture, les applications sont divisées en microservices indépendants qui peuvent être déployés et mis à l'échelle indépendamment. Cependant, la communication entre les microservices est très importante pour construire des systèmes stables et fiables. Dans cet article, nous explorerons comment utiliser Golang et RabbitMQ pour réaliser le découplage et le découplage des messages dans une architecture de microservices.

Afin de réaliser le découplage des messages et le découplage entre les microservices, nous utilisons RabbitMQ comme courtier de messages. RabbitMQ est un logiciel de courtage de messages open source qui implémente la spécification AMQP (Advanced Message Queuing Protocol) et fournit un mécanisme de transmission de messages fiable.

Tout d'abord, nous devons installer RabbitMQ et le démarrer. Vous pouvez trouver des étapes d'installation et de configuration spécifiques sur le site officiel de RabbitMQ.

Ensuite, nous utiliserons Golang pour écrire deux microservices simples, l'un est l'expéditeur du message (Producteur) et l'autre est le destinataire du message (Consommateur).

Le microservice Producer est responsable de l'envoi des messages à la file d'attente de messages RabbitMQ. L'exemple de code est le suivant :

package main

import (
    "log"

    "github.com/streadway/amqp"
)

func main() {
    conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
    if err != nil {
        log.Fatal(err)
    }

    ch, err := conn.Channel()
    if err != nil {
        log.Fatal(err)
    }

    q, err := ch.QueueDeclare(
        "hello", // 队列名称
        false,   // 是否持久化
        false,   // 是否自动删除
        false,   // 是否独占连接
        false,   // 是否阻塞
        nil,     // 其他属性
    )
    if err != nil {
        log.Fatal(err)
    }

    body := "Hello, RabbitMQ!"

    err = ch.Publish(
        "",     // 交换机名称
        q.Name, // 队列名称
        false,  // 是否强制性发布
        false,  // 是否立即发布
        amqp.Publishing{
            ContentType: "text/plain",
            Body:        []byte(body),
        },
    )
    if err != nil {
        log.Fatal(err)
    }

    log.Println("Sent message to RabbitMQ")

    defer conn.Close()
}
Copier après la connexion

Le microservice Consumer est responsable de la réception des messages de la file d'attente de messages de RabbitMQ et de leur traitement. L'exemple de code est le suivant :

package main

import (
    "log"

    "github.com/streadway/amqp"
)

func main() {
    conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
    if err != nil {
        log.Fatal(err)
    }

    ch, err := conn.Channel()
    if err != nil {
        log.Fatal(err)
    }

    q, err := ch.QueueDeclare(
        "hello", // 队列名称
        false,   // 是否持久化
        false,   // 是否自动删除
        false,   // 是否独占连接
        false,   // 是否阻塞
        nil,     // 其他属性
    )
    if err != nil {
        log.Fatal(err)
    }

    msgs, err := ch.Consume(
        q.Name, // 队列名称
        "",     // 消费者标识符
        true,   // 是否自动应答
        false,  // 是否独占连接
        false,  // 是否阻塞
        false,  // 其他属性
    )
    if err != nil {
        log.Fatal(err)
    }

    forever := make(chan bool)

    go func() {
        for d := range msgs {
            log.Printf("Received message: %s", d.Body)
        }
    }()

    log.Println("Waiting for messages...")

    <-forever
}
Copier après la connexion

Dans ces deux microservices, nous établissons d'abord une connexion à RabbitMQ et créons une file d'attente nommée "hello". Ensuite, dans le microservice Producer, nous envoyons un message à cette file d'attente. Dans le microservice Consumer, nous écoutons la file d'attente, en recevons des messages et imprimons les messages reçus.

Afin de tester ces deux microservices, nous pouvons d'abord démarrer le microservice Consumer, puis démarrer le microservice Producer. Pendant le processus de démarrage, vous pourrez voir les messages envoyés par le microservice Producer imprimés dans le microservice Consumer.

En utilisant Golang et RabbitMQ, nous avons réussi à réaliser le découplage et le découplage des messages dans l'architecture des microservices. En envoyant des messages à la file d'attente des messages, le microservice Producer peut fonctionner indépendamment du microservice Consumer. Lorsque le microservice Consumer est prêt à recevoir des messages, il peut obtenir et traiter les messages de la file d'attente de messages sans affecter le fonctionnement du microservice Producer.

Le découplage et le découplage des messages offrent flexibilité et évolutivité à l'architecture des microservices, nous permettant de mieux construire et maintenir des systèmes distribués. Dans le développement réel de microservices, vous pouvez personnaliser et étendre ces exemples de codes en fonction de vos propres besoins pour répondre à des situations réelles.

Résumé : En utilisant Golang et RabbitMQ, nous pouvons réaliser le découplage et le découplage des messages dans une architecture de microservices. En envoyant des messages à la file d'attente des messages, le microservice Producer peut fonctionner indépendamment du microservice Consumer. Ce modèle architectural offre flexibilité et évolutivité à l'architecture des microservices, nous permettant de mieux créer et maintenir des systèmes distribués.

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!

Étiquettes associées:
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!