Table des matières
1. Présentation de RabbitMQ
2. Introduction à go-zero
3. Comment utiliser go-zero et RabbitMQ
3.1 Producteur
3.2 Consommateur
4. Résumé
Maison développement back-end Golang Pratique d'application de go-zero et RabbitMQ

Pratique d'application de go-zero et RabbitMQ

Jun 23, 2023 pm 12:54 PM
rabbitmq 应用实践 go-zero

Aujourd'hui, de plus en plus d'entreprises commencent à adopter le modèle d'architecture de microservices, et dans cette architecture, les files d'attente de messages sont devenues une méthode de communication importante, parmi laquelle RabbitMQ est largement utilisé. Dans le langage Go, go-zero est un framework qui a émergé ces dernières années. Il fournit de nombreux outils et méthodes pratiques pour permettre aux développeurs d'utiliser plus facilement les files d'attente de messages. Ci-dessous, nous présenterons le go-zero basé sur des applications pratiques et son utilisation. et pratique d'application de RabbitMQ.

1. Présentation de RabbitMQ

RabbitMQ est un logiciel de file d'attente de messages open source, fiable et efficace. Il est largement utilisé dans les applications de niveau entreprise, améliorant considérablement l'évolutivité et la stabilité du système d'application. RabbitMQ utilise le protocole AMQP, qui est une spécification qui définit les messages d'opération, qui permet à différentes applications d'échanger des informations sans restrictions de langue.

Il existe quatre concepts dans RabbitMQ : producteur, consommateur, file d'attente et échange. Le producteur est l'expéditeur des messages, le consommateur est le récepteur des messages, la file d'attente est le conteneur de stockage des messages et le commutateur est le centre du routage des messages, acheminant les messages vers la file d'attente correspondante.

2. Introduction à go-zero

go-zero est un framework de microservices basé sur le langage go. Il fournit de nombreux outils et méthodes pratiques, permettant aux développeurs de concevoir et de développer plus facilement des applications de microservices hautes performances et haute fiabilité. Le framework go-zero adopte des principes de conception légers pour simplifier le processus de développement et améliorer l’efficacité du développement.

Le module de file d'attente de messages de go-zero utilise RabbitMQ, qui fournit une prise en charge complète de la file d'attente de messages, y compris les producteurs, les consommateurs, les files d'attente et les commutateurs, etc., permettant aux développeurs d'utiliser rapidement et facilement RabbitMQ pour la communication de messages. Dans le même temps, go-zero fournit également sa propre fonction de journalisation, qui permet de suivre et d'analyser efficacement le fonctionnement du système.

3. Comment utiliser go-zero et RabbitMQ

Ci-dessous, nous présenterons l'utilisation de go-zero et RabbitMQ sur la base d'un cas pratique. Ce cas est un simple système d'enregistrement et de connexion d'utilisateur. Lorsqu'un utilisateur s'inscrit, le système stockera les informations de l'utilisateur dans la base de données et enverra en même temps le message à RabbitMQ, qui sera finalement transmis au consommateur pour traitement. Le consommateur est responsable du stockage des informations utilisateur dans Redis pour améliorer les performances du système.

3.1 Producteur

Nous définissons d'abord une structure d'informations utilisateur pour stocker les informations d'enregistrement des utilisateurs.

type User struct {
    Name     string `json:"name"`
    Password string `json:"password"`
    Email    string `json:"email"`
}
Copier après la connexion

Ensuite, nous définissons une interface producteur pour envoyer les informations utilisateur à RabbitMQ.

type Producer interface {
    Publish(ctx context.Context, data []byte) error
}
Copier après la connexion

Nous utilisons l'implémentation RabbitMQ dans la bibliothèque "go-zero/messaging" pour implémenter l'interface producteur. Le code spécifique est le suivant.

import (
    "context"
    "encoding/json"
    "time"

    "github.com/gomodule/redigo/redis"
    "github.com/tal-tech/go-zero/core/logx"
    "github.com/tal-tech/go-zero/core/stores/cache"
    "github.com/tal-tech/go-zero/core/stores/redis/redisc"
    "github.com/tal-tech/go-zero/messaging"
    "github.com/tal-tech/go-zero/messaging/rabbitmq"
)

type mqProducer struct {
    publisher messaging.Publisher
    cache     cache.Cache
}

func NewMqProducer(amqpUrl, queueName, exchangeName string) Producer {
    pub := rabbitmq.NewPublisher(amqpUrl, rabbitmq.ExchangeOption(exchangeName))
    cacheConn := redisc.MustNewCache("localhost:6379", "")
    return &mqProducer{
        publisher: pub,
        cache:     cache.NewCache(cacheConn),
    }
}

func (producer *mqProducer) Publish(ctx context.Context, data []byte) error {
    defer producer.cache.Close()
    user := new(User)
    err := json.Unmarshal(data, &user)
    if err != nil {
        return err
    }
    err = producer.cache.Remember(user.Name, func() (interface{}, error) {
        return user, time.Second*3600
    })
    if err != nil {
        logx.Errorf("[Producer]remember cache first:%s", err.Error())
        return err
    }
    return producer.publisher.Publish(ctx, messaging.Message{
        Topic: producer.publisher.GetExchange() + "." + producer.publisher.GetQueue(),
        Body:  data,
    })
}
Copier après la connexion

Nous utilisons les modules Redis et Cache dans la bibliothèque "go-zero/stores" pour stocker les informations utilisateur dans Redis et mettre en cache les informations utilisateur dans Cache. Dans le même temps, nous utilisons l'implémentation de RabbitMQ dans la bibliothèque « go-zero/messaging » pour envoyer les informations utilisateur à RabbitMQ. La fonction "NewMqProducer" est utilisée pour créer une instance de producteur, où "amqpUrl" est l'URL de connexion de RabbitMQ, "queueName" est le nom de la file d'attente de messages et "exchangeName" est le nom du commutateur. La fonction "Publier" est utilisée pour envoyer des informations utilisateur à RabbitMQ.

3.2 Consommateur

Ensuite, nous définissons une interface consommateur pour recevoir des messages de RabbitMQ et stocker les messages dans Redis.

type Consumer interface {
    Consume(ctx context.Context, handler Handler) error
}

type Handler func(data []byte) error
Copier après la connexion

Nous utilisons l'implémentation RabbitMQ dans la bibliothèque "go-zero/messaging" pour implémenter l'interface consommateur. Le code spécifique est le suivant.

type mqConsumer struct {
    consumer messaging.Consumer
    cache    cache.Cache
}

func NewMqConsumer(amqpUrl, queueName, exchangeName, routingKey string) (Consumer, error) {
    sub := rabbitmq.NewSubscriber(amqpUrl, rabbitmq.ExchangeOption(exchangeName))
    err := sub.Subscribe(context.Background(), "", func(msg messaging.Message) error {
        cacheConn := redisc.MustNewCache("localhost:6379", "")
        defer cacheConn.Close()
        user := new(User)
        err := json.Unmarshal(msg.Body, &user)
        if err != nil {
            return err
        }
        err = cacheConn.Remember(user.Name, func() (interface{}, error) {
            return user, time.Second*3600
        })
        if err != nil {
            logx.Errorf("[Consumer]remember cache:%s", err.Error())
            return err
        }
        return nil
    }, rabbitmq.QueueOption(queueName), rabbitmq.QueueDurable())
    if err != nil {
        return nil, err
    }
    return &mqConsumer{
        consumer: sub,
        cache:    cache.NewCache(redisc.MustNewCache("localhost:6379", "")),
    }, nil
}

func (consumer *mqConsumer) Consume(ctx context.Context, handler Handler) error {
    return consumer.consumer.StartConsuming(ctx, func(msg messaging.Message) error {
        return handler(msg.Body)
    })
}
Copier après la connexion

Nous utilisons les modules Redis et Cache dans la bibliothèque "go-zero/stores" pour stocker les informations utilisateur dans Redis. En même temps, nous utilisons l'implémentation de RabbitMQ dans la bibliothèque "go-zero/messaging" pour recevoir des messages de RabbitMQ. La fonction "NewMqConsumer" est utilisée pour créer une instance de consommateur, où "amqpUrl" est l'URL de connexion de RabbitMQ, "queueName" est le nom de la file d'attente de messages, "exchangeName" est le nom du commutateur et "routingKey" est la clé de routage, utilisée pour acheminer les messages vers la file d'attente spécifiée. La fonction "Consume" est utilisée pour recevoir des messages de RabbitMQ et envoyer les messages à la fonction de traitement des messages "handler".

4. Résumé

Dans cet article, nous avons présenté les pratiques d'utilisation et d'application de go-zero et RabbitMQ sur la base d'exemples d'application spécifiques. go-zero fournit une prise en charge complète de la file d'attente de messages et peut utiliser rapidement et facilement RabbitMQ pour la communication de messages. Dans le même temps, les modules Redis et Cache de la bibliothèque « go-zero/stores » sont utilisés pour améliorer les performances du système à un nouveau niveau. Avec la popularité et l'application progressives du go-zero, je pense que de plus en plus d'entreprises et de développeurs utiliseront go-zero et RabbitMQ pour créer des applications de microservices hautes performances et haute fiabilité.

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment créer une application de messagerie fiable avec React et RabbitMQ Comment créer une application de messagerie fiable avec React et RabbitMQ Sep 28, 2023 pm 08:24 PM

Comment créer une application de messagerie fiable avec React et RabbitMQ Introduction : Les applications modernes doivent prendre en charge une messagerie fiable pour obtenir des fonctionnalités telles que les mises à jour en temps réel et la synchronisation des données. React est une bibliothèque JavaScript populaire pour créer des interfaces utilisateur, tandis que RabbitMQ est un middleware de messagerie fiable. Cet article explique comment combiner React et RabbitMQ pour créer une application de messagerie fiable et fournit des exemples de code spécifiques. Présentation de RabbitMQ :

Comment utiliser RabbitMQ pour implémenter le traitement distribué des messages en PHP Comment utiliser RabbitMQ pour implémenter le traitement distribué des messages en PHP Jul 18, 2023 am 11:00 AM

Comment utiliser RabbitMQ pour implémenter le traitement distribué des messages en PHP Introduction : Dans le développement d'applications à grande échelle, les systèmes distribués sont devenus une exigence courante. Le traitement distribué des messages est un modèle qui améliore l'efficacité et la fiabilité du système en distribuant les tâches à plusieurs nœuds de traitement. RabbitMQ est un système de mise en file d'attente de messages open source et fiable qui utilise le protocole AMQP pour implémenter la livraison et le traitement des messages. Dans cet article, nous expliquerons comment utiliser RabbitMQ en PHP pour la distribution

Solution de synchronisation des données en temps réel entre Golang et RabbitMQ Solution de synchronisation des données en temps réel entre Golang et RabbitMQ Sep 27, 2023 pm 10:41 PM

Introduction à la solution de synchronisation des données en temps réel entre Golang et RabbitMQ : À l'ère actuelle, avec la popularité d'Internet et la croissance explosive du volume de données, la synchronisation des données en temps réel est devenue de plus en plus importante. Afin de résoudre les problèmes de transmission asynchrone et de synchronisation des données, de nombreuses entreprises ont commencé à utiliser des files d'attente de messages pour réaliser une synchronisation des données en temps réel. Cet article présentera une solution de synchronisation de données en temps réel basée sur Golang et RabbitMQ et fournira des exemples de code spécifiques. 1. Qu'est-ce que RabbitMQ ? Rabbin

Pratique d'application de go-zero et RabbitMQ Pratique d'application de go-zero et RabbitMQ Jun 23, 2023 pm 12:54 PM

Aujourd'hui, de plus en plus d'entreprises commencent à adopter le modèle d'architecture de microservices, et dans cette architecture, les files d'attente de messages sont devenues une méthode de communication importante, parmi laquelle RabbitMQ est largement utilisé. Dans le langage Go, go-zero est un framework qui a émergé ces dernières années. Il fournit de nombreux outils et méthodes pratiques pour permettre aux développeurs d'utiliser plus facilement les files d'attente de messages. Ci-dessous, nous présenterons go-zero basé sur des applications pratiques et leur utilisation. et pratique d'application de RabbitMQ. 1.RabbitMQ PrésentationLapin

De l'entrée à la compétence : maîtriser le cadre go-zero De l'entrée à la compétence : maîtriser le cadre go-zero Jun 23, 2023 am 11:37 AM

Go-zero est un excellent framework de langage Go qui fournit un ensemble complet de solutions, notamment RPC, mise en cache, tâches planifiées et autres fonctions. En fait, il est très simple de créer un service performant en utilisant go-zero, et vous pouvez même passer de débutant à compétent en quelques heures. Cet article vise à présenter le processus de création de services hautes performances à l'aide du framework go-zero et à aider les lecteurs à comprendre rapidement les concepts fondamentaux du framework. 1. Installation et configuration Avant de commencer à utiliser go-zero, nous devons l'installer et configurer certains environnements nécessaires. 1

Golang RabbitMQ : Conception architecturale et mise en œuvre d'un système de file d'attente de messages hautement disponible Golang RabbitMQ : Conception architecturale et mise en œuvre d'un système de file d'attente de messages hautement disponible Sep 28, 2023 am 08:18 AM

GolangRabbitMQ : La conception architecturale et la mise en œuvre d'un système de file d'attente de messages hautement disponible nécessitent des exemples de code spécifiques Introduction : Avec le développement continu de la technologie Internet et sa large application, les files d'attente de messages sont devenues un élément indispensable des systèmes logiciels modernes. En tant qu'outil permettant de mettre en œuvre le découplage, la communication asynchrone, le traitement tolérant aux pannes et d'autres fonctions, la file d'attente de messages offre une haute disponibilité et une prise en charge de l'évolutivité pour les systèmes distribués. En tant que langage de programmation efficace et concis, Golang est largement utilisé pour créer des systèmes à haute concurrence et hautes performances.

Golang et RabbitMQ implémentent une communication asynchrone entre plusieurs services Golang et RabbitMQ implémentent une communication asynchrone entre plusieurs services Sep 28, 2023 pm 03:49 PM

Golang et RabbitMQ implémentent une communication asynchrone entre plusieurs services Introduction : Dans une architecture de microservices, la communication asynchrone entre plusieurs services est une exigence très courante. Afin d'obtenir un couplage lâche et un traitement hautement simultané entre les services, il est crucial de choisir une file d'attente de messages appropriée. Cet article expliquera comment utiliser Golang et RabbitMQ pour implémenter une communication asynchrone entre plusieurs services et fournira des exemples de code spécifiques. 1. Qu'est-ce que RabbitMQ ? RabbitMQ est une messagerie open source fiable et évolutive

Stratégies d'utilisation de RabbitMQ pour réaliser la répartition des tâches et l'équilibrage de charge dans Golang Stratégies d'utilisation de RabbitMQ pour réaliser la répartition des tâches et l'équilibrage de charge dans Golang Sep 27, 2023 am 11:22 AM

Présentation des stratégies d'utilisation de RabbitMQ pour réaliser la répartition des tâches et l'équilibrage de charge dans Golang : Dans un système distribué, la répartition des tâches et l'équilibrage de charge sont très importants. Une solution courante consiste à utiliser des files d’attente de messages pour implémenter la distribution et le traitement des tâches. Cet article expliquera comment utiliser Golang et RabbitMQ pour implémenter des stratégies de répartition des tâches et d'équilibrage de charge, et fournira des exemples de code spécifiques. Introduction à RabbitMQ : RabbitMQ est un middleware de messagerie open source fiable, évolutif.

See all articles