Maison > développement back-end > Golang > Conseils pour créer des transferts de données distribués évolutifs à l'aide de Golang et gRPC

Conseils pour créer des transferts de données distribués évolutifs à l'aide de Golang et gRPC

WBOY
Libérer: 2023-07-18 18:31:46
original
1487 Les gens l'ont consulté

Conseils pour créer un transfert de données distribué évolutif à l'aide de Golang et gRPC

Dans les systèmes distribués modernes, le transfert de données est un composant essentiel. Les protocoles de transfert de données traditionnels tels que l'API REST et SOAP peuvent présenter des goulots d'étranglement en termes de performances et des problèmes d'évolutivité lors du traitement de données à grande échelle. Afin de résoudre ces problèmes, de plus en plus de développeurs commencent à utiliser gRPC comme solution de transmission de données plus efficace et évolutive.

gRPC est un framework d'appel de procédure à distance (RPC) hautes performances open source par Google, implémenté sur la base de Protocol Buffers. Il présente les avantages suivants : hautes performances, prise en charge de plusieurs langues, fonctionnalités riches (telles que le streaming et l'authentification), facilité d'utilisation et de maintenance, etc. Dans cet article, nous verrons comment créer des transferts de données distribués évolutifs à l'aide de Golang et gRPC.

Préparation

Avant de commencer, nous devons installer les dépendances associées de Golang et gRPC. La dernière version de Golang ainsi que Protocol Buffers peuvent être téléchargées et installées à partir du site officiel.

Après avoir terminé l'installation, nous devons installer le plug-in Golang pour gRPC, qui peut être installé via la commande suivante :

go get -u google.golang.org/grpc
Copier après la connexion

De plus, nous devons également installer le plug-in Golang pour les tampons de protocole, qui peut être installé via la commande suivante :

go get -u github.com/golang/protobuf/protoc-gen-go
Copier après la connexion

Définir et générer le service gRPC

Tout d'abord, nous devons définir un service gRPC. Vous pouvez utiliser le langage de définition Protocol Buffers pour écrire l’interface et la structure de données du service.

Nous créons un fichier nommé data.proto pour définir l'interface et le type de message de transmission des données : data.proto的文件,用于定义数据传输的接口和消息类型:

syntax = "proto3";

package data;

service DataTransfer {
  rpc SendData (DataRequest) returns (DataResponse) {}
}

message DataRequest {
  string message = 1;
}

message DataResponse {
  int32 status = 1;
  string response_message = 2;
}
Copier après la connexion

接下来,我们需要生成Golang代码。可以使用Protocol Buffers的Golang插件来生成Golang代码:

protoc --go_out=. data.proto
Copier après la connexion

执行上述命令后,会在当前目录下生成一个名为data.pb.go的文件,其中包含了生成的Golang代码。

实现gRPC服务

接下来,我们需要实现gRPC服务。在Golang中,可以轻松地使用生成的Golang代码来实现服务。

创建一个名为server.go的文件,并添加以下内容:

package main

import (
    "context"
    "log"
    "net"

    "google.golang.org/grpc"

    pb "your_package_name/data"
)

type server struct{}

func (s *server) SendData(ctx context.Context, req *pb.DataRequest) (*pb.DataResponse, error) {
    log.Printf("Received message: %s", req.Message)

    response := &pb.DataResponse{
        Status:          200,
        ResponseMessage: "Data received successfully",
    }

    return response, nil
}

func main() {
    lis, err := net.Listen("tcp", ":50051")
    if err != nil {
        log.Fatalf("failed to listen: %v", err)
    }

    s := grpc.NewServer()
    pb.RegisterDataTransferServer(s, &server{})

    log.Println("Server started on port :50051")
    if err := s.Serve(lis); err != nil {
        log.Fatalf("failed to serve: %v", err)
    }
}
Copier après la connexion

在上述代码中,我们首先创建了一个server结构体,该结构体实现了定义在data.pb.go中生成的DataTransferServer接口的方法。在SendData方法中,我们简单地打印接收到的消息,并返回一个成功的响应。

接下来,我们在main函数中启动了一个gRPC服务,监听在端口50051。

客户端代码

最后,我们可以编写一个客户端代码来调用我们实现的gRPC服务。创建一个名为client.go的文件,并添加以下内容:

package main

import (
    "context"
    "log"

    "google.golang.org/grpc"

    pb "your_package_name/data"
)

func main() {
    conn, err := grpc.Dial("localhost:50051", grpc.WithInsecure())
    if err != nil {
        log.Fatalf("did not connect: %v", err)
    }
    defer conn.Close()

    c := pb.NewDataTransferClient(conn)

    message := "Hello gRPC"

    response, err := c.SendData(context.Background(), &pb.DataRequest{Message: message})
    if err != nil {
        log.Fatalf("could not send data: %v", err)
    }

    log.Printf("Response status: %d", response.Status)
    log.Printf("Response message: %s", response.ResponseMessage)
}
Copier après la connexion

在上述代码中,我们首先使用grpc.Dial函数连接到服务器,并创建一个DataTransferClient的客户端。然后,我们使用客户端调用SendData

go run server.go
Copier après la connexion

Ensuite, nous devons générer du code Golang. Vous pouvez utiliser le plug-in Golang de Protocol Buffers pour générer du code Golang :

go run client.go
Copier après la connexion
Après avoir exécuté la commande ci-dessus, un fichier nommé data.pb.go sera généré dans le répertoire courant, qui contient le code Golang généré.

Implémenter le service gRPC

Ensuite, nous devons implémenter le service gRPC. Dans Golang, les services peuvent être facilement implémentés à l'aide du code Golang généré.

Créez un fichier appelé server.go et ajoutez le contenu suivant :

rrreee

Dans le code ci-dessus, nous créons d'abord une structure server, dont le corps implémente les méthodes de l'interface DataTransferServer définie dans data.pb.go. Dans la méthode SendData, nous imprimons simplement le message reçu et renvoyons une réponse réussie.

Ensuite, nous avons démarré un service gRPC dans la fonction main, en écoute sur le port 50051.
  • Code client
  • Enfin, nous pouvons écrire un code client pour appeler le service gRPC que nous avons implémenté. Créez un fichier appelé client.go et ajoutez le contenu suivant :
  • rrreee
Dans le code ci-dessus, nous nous connectons d'abord au serveur en utilisant la fonction grpc.Dial et créons A client pour DataTransferClient. Ensuite, nous utilisons le client pour appeler la méthode SendData pour envoyer les données. 🎜🎜Exécuter et tester🎜🎜Après avoir fini d'écrire le code, nous pouvons utiliser les commandes suivantes pour exécuter le serveur et le client séparément : 🎜rrreeerrreee🎜Après avoir exécuté le serveur, il indiquera que le service a été démarré sur le port 50051. Exécutez ensuite le client, qui se connectera au serveur et enverra des données. Le client imprime l'état de la réponse et le message de réponse. 🎜🎜Grâce aux étapes ci-dessus, nous avons réussi à créer une transmission de données distribuée évolutive à l'aide de Golang et gRPC. Les hautes performances et l'évolutivité de gRPC le rendent idéal pour gérer des données à grande échelle. Que vous construisiez une architecture de microservices ou un système distribué à grande échelle, gRPC sera votre assistant idéal. 🎜🎜Des exemples de code et d'autres ressources peuvent être trouvés dans le [dépôt GitHub](https://github.com/example/golang-grpc-tutorial). 🎜🎜Matériaux de référence : 🎜🎜🎜[Documentation officielle de gRPC](https://grpc.io/)🎜🎜[Documentation officielle de Golang](https://golang.org/)🎜🎜

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