Maison développement back-end Golang Utilisez go-zero pour implémenter des appels RPC multilingues distribués

Utilisez go-zero pour implémenter des appels RPC multilingues distribués

Jun 22, 2023 am 09:25 AM
分布式 go-zero rpc调用

Avec la croissance de l'échelle des entreprises, l'existence d'applications uniques ne peut plus répondre aux besoins du système, et l'architecture distribuée est progressivement devenue la norme. Dans les systèmes distribués, RPC est devenu un élément indispensable. Il constitue un moyen pratique, efficace et fiable d'appeler des services à distance, permettant une interaction de données et des appels rapides et stables entre divers services.

Pour les appels RPC multilingues, le protocole de communication et le protocole de sérialisation doivent être compatibles avec plusieurs langages de programmation, ils sont donc relativement difficiles à mettre en œuvre. Cet article présentera comment utiliser le framework go-zero pour implémenter des appels RPC distribués multilingues, dans le but de fournir aux lecteurs une solution pratique.

  1. go-zero framework introduction

go-zero est un framework Web léger qui utilise le net/natif du langage go Le module http fournit une méthode de développement d'API simple, facile à utiliser et hautes performances qui peut facilement combiner des services HTTP avec des microservices. go-zero peut nous aider à créer rapidement des applications serveur distribuées à haute concurrence, et le code et la documentation peuvent être obtenus gratuitement sur GitHub.

  1. Mise en œuvre des appels RPC multilingues

2.1 Définir les services

Quand nous définissons les services en go-zero Vous vous devez d'abord écrire un fichier proto pour définir l'interface de communication entre le serveur et le client. Supposons que nous définissions un service nommé Exemple, qui contient deux méthodes :

syntax = "proto3";

package rpc;

service Example {
    rpc SayHello (Request) returns (Response);
    rpc GetUser (UserRequest) returns (UserResponse);
}

message Request {
    string name = 1;
}

message Response {
    string message = 1;
}

message UserRequest {
    string id = 1;
}

message UserResponse {
    string name = 1;
    string email = 2;
}
Copier après la connexion

Après avoir défini le fichier proto, nous devons utiliser le compilateur protobuf pour le compiler dans un fichier source du langage go, exécutez la commande suivante :

protoc --go_out=. --go-grpc_out=. rpc.proto
Copier après la connexion

Cela générera deux fichiers rpc.pb.go et rpc_grpc.pb.go.

2.2 Implémentation du serveur

Dans le framework go-zero, nous pouvons utiliser le module go-grpc pour implémenter le service grpc. Lors de l'implémentation du serveur, vous devez implémenter l'interface définie dans le fichier proto, utiliser server.NewServer fourni par go-zero et appeler la méthode AddService pour ajouter le service, puis démarrer le service grpc dans la méthode Init.

package server

import (
    "context"
    "rpc"

    "github.com/tal-tech/go-zero/core/logx"
    "github.com/tal-tech/go-zero/core/stores/sqlx"
    "github.com/tal-tech/go-zero/core/syncx"
    "github.com/tal-tech/go-zero/zrpc"
    "google.golang.org/grpc"
)

type ExampleContext struct {
    Logx      logx.Logger
    SqlConn   sqlx.SqlConn
    CacheConn syncx.SharedCalls
}

type ExampleServer struct {
    Example rpc.ExampleServer
}

func NewExampleServer(ctx ExampleContext) *ExampleServer {
    return &ExampleServer{
        Example: &exampleService{
            ctx: ctx,
        },
    }
}

func (s *ExampleServer) Init() {
    server := zrpc.MustNewServer(zrpc.RpcServerConf{
        BindAddress: "localhost:7777",
    })
    rpc.RegisterExampleServer(server, s.Example)
    server.Start()
}

type exampleService struct {
    ctx ExampleContext
}

func (s *exampleService) SayHello(ctx context.Context, req *rpc.Request) (*rpc.Response, error) {
    return &rpc.Response{
        Message: "Hello, " + req.Name,
    }, nil
}

func (s *exampleService) GetUser(ctx context.Context, req *rpc.UserRequest) (*rpc.UserResponse, error) {
    // 查询数据库
    return &rpc.UserResponse{
        Name:  "name",
        Email: "email",
    }, nil
}
Copier après la connexion

Sur le serveur, nous pouvons utiliser la méthode Init pour démarrer le serveur RPC, et utiliser MustNewServer pour créer le serveur RPC. Nous devons passer une structure RpcServerConf, incluant l'adresse que nous voulons lier.

2.3 Implémentation du client

Dans le framework go-zero, nous pouvons utiliser le module zrpc pour implémenter le client grpc. Utilisez zrpc.Dial pour créer une connexion et instancier le client rpc.

package client

import (
    "context"
    "rpc"

    "google.golang.org/grpc"
)

type ExampleClient struct {
    client rpc.ExampleClient
}

func NewExampleClient(conn *grpc.ClientConn) *ExampleClient {
    return &ExampleClient{
        client: rpc.NewExampleClient(conn),
    }
}

func (c *ExampleClient) SayHello(name string) (string, error) {
    resp, err := c.client.SayHello(context.Background(), &rpc.Request{
        Name: name,
    })
    if err != nil {
        return "", err
    }
    return resp.Message, nil
}

func (c *ExampleClient) GetUser(id string) (*rpc.UserResponse, error) {
    return c.client.GetUser(context.Background(), &rpc.UserRequest{
        Id: id,
    })
}
Copier après la connexion

Sur le client, il suffit d'utiliser la fonction NewExampleClient pour créer le client RPC. La fonction de la méthode SayHello est d'obtenir une réponse du serveur et de la renvoyer. La méthode GetUser obtient la réponse des informations utilisateur du serveur et la renvoie sous la forme de UserResponse.

2.4 Test

Maintenant que nous avons implémenté le code serveur et client, nous pouvons le tester avec le code suivant :

package main

import (
    "fmt"
    "log"
    "rpc_example/client"
    "rpc_example/server"

    "google.golang.org/grpc"
)

func main() {
    ctx := server.ExampleContext{}
    conn, err := grpc.Dial("localhost:7777", grpc.WithInsecure())
    if err != nil {
        log.Fatalf("grpc.Dial err :%v", err)
    }

    defer conn.Close()

    client := client.NewExampleClient(conn)
    resp, err := client.SayHello("Alice")
    if err != nil {
        log.Fatalf("client.SayHello err : %v", err)
    }

    fmt.Println(resp)

    user, err := client.GetUser("123")
    if err != nil {
        log.Fatalf("client.GetUser err : %v", err)
    }

    fmt.Println(user)
}
Copier après la connexion

ci-dessus Dans code, nous créons une connexion grpc et appelons les méthodes SayHello et GetUser pour tester notre service RPC. Nous pouvons répondre avec succès avec des données correctes et confirmer que le service RPC fonctionne normalement.

  1. Summary

Dans cet article, nous expliquons comment utiliser le framework go-zero pour implémenter des appels RPC multilingues distribués, ce qui implique module Def de go-zero, grpc, protobuf et zrpc et autres technologies. Lors de l'implémentation des services RPC, nous définissons d'abord l'interface RPC, puis écrivons le code serveur et client basé sur l'interface. Ajoutez enfin la méthode Init pour démarrer le service RPC. Si vous recherchez un framework de système distribué léger et facile à utiliser, go-zero est certainement un bon choix.

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)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois 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 utiliser Redis pour réaliser une synchronisation distribuée des données Comment utiliser Redis pour réaliser une synchronisation distribuée des données Nov 07, 2023 pm 03:55 PM

Comment utiliser Redis pour réaliser une synchronisation de données distribuées Avec le développement de la technologie Internet et des scénarios d'application de plus en plus complexes, le concept de systèmes distribués est de plus en plus largement adopté. Dans les systèmes distribués, la synchronisation des données est un problème important. En tant que base de données en mémoire hautes performances, Redis peut non seulement être utilisé pour stocker des données, mais peut également être utilisé pour réaliser une synchronisation distribuée des données. Pour la synchronisation distribuée des données, il existe généralement deux modes courants : le mode publication/abonnement (Publish/Subscribe) et la réplication maître-esclave (Master-slave).

Comment Redis implémente la gestion distribuée des sessions Comment Redis implémente la gestion distribuée des sessions Nov 07, 2023 am 11:10 AM

La façon dont Redis implémente la gestion de session distribuée nécessite des exemples de code spécifiques. La gestion de session distribuée est aujourd'hui l'un des sujets brûlants sur Internet. Face à une concurrence élevée et à de gros volumes de données, les méthodes traditionnelles de gestion de session deviennent progressivement inadéquates. En tant que base de données clé-valeur hautes performances, Redis fournit une solution de gestion de session distribuée. Cet article expliquera comment utiliser Redis pour implémenter la gestion de session distribuée et donnera des exemples de code spécifiques. 1. Introduction à Redis en tant que stockage de session distribué La méthode traditionnelle de gestion de session consiste à stocker les informations de session.

Partage d'expérience dans l'utilisation de MongoDB pour mettre en œuvre la planification et l'exécution de tâches distribuées Partage d'expérience dans l'utilisation de MongoDB pour mettre en œuvre la planification et l'exécution de tâches distribuées Nov 02, 2023 am 09:39 AM

MongoDB est une base de données NoSQL open source offrant des performances, une évolutivité et une flexibilité élevées. Dans les systèmes distribués, la planification et l'exécution des tâches sont un problème clé. En utilisant les caractéristiques de MongoDB, des solutions de planification et d'exécution des tâches distribuées peuvent être réalisées. 1. Analyse des exigences pour la planification distribuée des tâches Dans un système distribué, la planification des tâches est le processus d'attribution de tâches à différents nœuds pour exécution. Les exigences courantes en matière de planification des tâches incluent : 1. Distribution des demandes de tâches : envoyer les demandes de tâches aux nœuds d'exécution disponibles.

Comment utiliser Swoole pour mettre en œuvre la planification distribuée des tâches planifiées Comment utiliser Swoole pour mettre en œuvre la planification distribuée des tâches planifiées Nov 07, 2023 am 11:04 AM

Comment utiliser Swoole pour implémenter la planification distribuée des tâches planifiées Introduction : Dans le développement PHP traditionnel, nous utilisons souvent cron pour implémenter la planification des tâches planifiées, mais cron ne peut exécuter des tâches que sur un seul serveur et ne peut pas faire face aux scénarios de concurrence élevée. Swoole est un framework de concurrence asynchrone hautes performances basé sur PHP. Il fournit des capacités de communication réseau complètes et une prise en charge multi-processus, nous permettant de mettre en œuvre facilement une planification distribuée des tâches planifiées. Cet article explique comment utiliser Swoole pour mettre en œuvre la planification distribuée des tâches planifiées.

Partage d'expériences pratiques en matière de développement Java : création d'une fonction de collecte de journaux distribuée Partage d'expériences pratiques en matière de développement Java : création d'une fonction de collecte de journaux distribuée Nov 20, 2023 pm 01:17 PM

Partage d'expériences pratiques en matière de développement Java : création d'une fonction de collecte de journaux distribuée Introduction : Avec le développement rapide d'Internet et l'émergence de données à grande échelle, l'application de systèmes distribués devient de plus en plus répandue. Dans les systèmes distribués, la collecte et l’analyse des journaux constituent un élément très important. Cet article partagera l'expérience de la création d'une fonction de collecte de journaux distribuée dans le développement Java, dans l'espoir d'être utile aux lecteurs. 1. Introduction de base Dans un système distribué, chaque nœud génère une grande quantité d'informations de journal. Ces informations de journal sont utiles pour la surveillance des performances du système, le dépannage et l'analyse des données.

Utiliser Redis pour obtenir la cohérence du cache distribué Utiliser Redis pour obtenir la cohérence du cache distribué Nov 07, 2023 pm 12:05 PM

Utiliser Redis pour assurer la cohérence du cache distribué Dans les systèmes distribués modernes, le cache joue un rôle très important. Cela peut réduire considérablement la fréquence d’accès du système à la base de données et améliorer les performances et le débit du système. Dans un système distribué, afin de garantir la cohérence du cache, nous devons résoudre le problème de la synchronisation des données entre plusieurs nœuds. Dans cet article, nous présenterons comment utiliser Redis pour obtenir la cohérence du cache distribué et donnerons des exemples de code spécifiques. Redis est une base de données clé-valeur hautes performances qui prend en charge la persistance, la réplication et la collecte

Utiliser Redis pour implémenter la planification de tâches distribuées Utiliser Redis pour implémenter la planification de tâches distribuées Nov 07, 2023 am 08:15 AM

Utiliser Redis pour mettre en œuvre la planification distribuée des tâches Avec l'expansion de l'activité et le développement du système, de nombreuses entreprises doivent mettre en œuvre la planification distribuée des tâches pour garantir que les tâches peuvent être exécutées sur plusieurs nœuds en même temps, améliorant ainsi la stabilité et la disponibilité du système. système. En tant que produit de stockage de données en mémoire hautes performances, Redis présente les caractéristiques de distribution, de haute disponibilité et de hautes performances, et est très approprié pour la mise en œuvre de la planification distribuée des tâches. Cet article explique comment utiliser Redis pour implémenter la planification distribuée des tâches et fournit des exemples de code correspondants. 1. Base Redis

Comment utiliser Redis pour implémenter la publication et l'abonnement de messages distribués Comment utiliser Redis pour implémenter la publication et l'abonnement de messages distribués Nov 07, 2023 am 09:39 AM

Comment utiliser Redis pour implémenter la publication et l'abonnement de messages distribués Introduction : Dans les systèmes distribués, la publication et l'abonnement de messages sont un mode de communication courant qui peut réaliser un découplage entre différents modules. En tant que système de stockage clé-valeur hautes performances, Redis peut être utilisé pour implémenter des fonctions de publication et d'abonnement de messages distribués. Cet article explique comment utiliser Redis pour implémenter cette fonction et fournit des exemples de code spécifiques. 1. La fonction de publication et d'abonnement de Redis La fonction de publication et d'abonnement de Redis est une méthode d'implémentation basée sur la file d'attente de messages.

See all articles