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

Comment configurer l'environnement de développement go-micro

藏色散人
Libérer: 2020-08-12 13:58:50
avant
3022 Les gens l'ont consulté
Vous trouverez ci-dessous

Tutoriel Golang colonne pour présenter la méthode de création d'un environnement de développement Go-Micro, j'espère que cela sera utile aux amis dans le besoin !

Comment configurer l'environnement de développement go-micro

Récemment, parce que je dois utiliser go-micro, j'apprends les microservices. Cet article enregistre le processus de construction de micro.

Environnement d'installation

micro fournit un runtime qui doit être installé avant d'utiliser go-micro. Il existe plusieurs façons d'installer le

code source
go get github.com/micro/micro/v2
Copier après la connexion

Je ne peux pas l'installer de cette façon. Ce n'est pas à cause du réseau. savoir où est le conflit. . .

docker
docker pull micro/micro
Copier après la connexion

Binaire
# MacOS
curl -fsSL https://raw.githubusercontent.com/micro/micro/master/scripts/install.sh | /bin/bash

# Linux
wget -q  https://raw.githubusercontent.com/micro/micro/master/scripts/install.sh -O - | /bin/bash

# Windows
powershell -Command "iwr -useb https://raw.githubusercontent.com/micro/micro/master/scripts/install.ps1 | iex"
Copier après la connexion

Il est recommandé d'utiliser cette méthode pour télécharger et installer, compiler Un bon package binaire peut être utilisé directement en l'ajoutant à la variable d'environnement. Si vous ne souhaitez pas utiliser de script pour l'installer, vous pouvez le télécharger depuis la page de publication de github

https://github.com/micro/micro/releases
Copier après la connexion

Testez-le

Maintenant que le micro est installé, testons-le.

micro web
Copier après la connexion
Copier après la connexion

Sortie

$ micro web2020-07-05 04:24:16  file=http/http.go:90 level=info service=web HTTP API Listening on [::]:80822020-07-05 04:24:16  file=v2@v2.9.1/service.go:200 level=info service=web Starting [service] go.micro.web2020-07-05 04:24:16  file=grpc/grpc.go:864 level=info service=web Server [grpc] Listening on [::]:264492020-07-05 04:24:16  file=grpc/grpc.go:697 level=info service=web Registry [mdns] Registering node: go.micro.web-b76a12a1-5226-429f-9633-ce304f179657
Copier après la connexion

Visitez maintenant

pour voir la page Web du micro. localhost:8082

Install protoc

protoc est le compilateur de protobuf, et protobuf est un format utilisé pour transmettre des données, telles que json et xml.

Adresse de téléchargement du protocole

https://github.com/protocolbuffers/protobuf/releases
Copier après la connexion

Après le téléchargement, il y a un fichier exécutable du protocole dans le dossier bin. Ajoutez-le à la variable d'environnement. (Vous pouvez simplement le placer directement dans un dossier contenant des variables d'environnement ajoutées. Cela peut éviter que l'ordinateur ne soit rempli de diverses variables d'environnement, et placer les outils couramment utilisés dans un dossier est également pratique pour la gestion)

Recommandé : "

go Language"

Il y a aussi protoc-gen-go qui doit être installé. Vous pouvez le télécharger de la manière suivante.

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

exemple

Écrivons maintenant une démo pour nous entraîner.

Il y a trois fichiers au total,

, server.go, client.gogreeter.proto

greeter.proto
syntax = "proto3";package protos;service Greeter {
    rpc Hello (Request) returns (Response){};}message Request {
    string name = 1;}message Response {
    string greeting = 2;}
Copier après la connexion

server.go
package mainimport (
    "context"
    "fmt"
    "github.com/micro/go-micro/v2")type Greeter struct {}func (g *Greeter) Hello(context context.Context, req *Request, rsp *Response) error {
    rsp.Greeting = "Hello " + req.Name    return nil}func main() {
    service := micro.NewService(
        micro.Name("greeter"),
    )
    service.Init()

    err := RegisterGreeterHandler(service.Server(), new(Greeter))
    if err != nil {
        fmt.Println(err)
    }

    if err := service.Run(); err != nil {
        fmt.Println(err)
    }}
Copier après la connexion

client.go
package mainimport (
    "context"
    "fmt"
    "github.com/micro/go-micro/v2")func main() {
    service := micro.NewService(micro.Name("greeter.client"))
    service.Init()

    greeter := NewGreeterService("greeter", service.Client())
    rsp, err := greeter.Hello(context.TODO(), &Request{Name: "Zaun pianist"})
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(rsp.Greeting)}
Copier après la connexion

Il est fortement recommandé d'utiliser go mod pour gérer les dépendances. La vitesse de mise à jour du projet est très rapide. . Il existe de nombreux tutoriels sur Baidu. Cela ne fonctionne plus, diverses erreurs se sont produites lors du processus d'installation

Ceci est mon fichier mod

module hello

go 1.14require (
    github.com/golang/protobuf v1.4.0
    github.com/micro/go-micro/v2 v2.9.1
    google.golang.org/protobuf v1.22.0)
Copier après la connexion

Remarque, mon greeter. fichiers proto et server.go, client.go Il est placé dans le même dossier

Compile greeter.proto
protoc --micro_out=. --go_out=. greeter.proto
Copier après la connexion

Une fois la compilation terminée, deux Les fichiers de code source go seront générés :

  • greeter.pb.go
  • greeter.pb.micro.go

Exécuter

Vous pouvez maintenant exécuter le serveur, ici car le client et le serveur sont placés dans le même dossier, c'est-à-dire dans le même package. Les deux ont des fonctions principales, donc

ne peut pas être utilisé. Quant à savoir pourquoi les deux autres le sont. ajouté, il s'agit d'une exigence du compilateur du langage Go et doit être Spécifiez les fichiers requis pour la compilation. go run ./

go run server.go greeter.pb.go greeter.pb.micro.go
Copier après la connexion

Vous pouvez utiliser micro pour afficher les microservices en cours d'exécution

micro list services
Copier après la connexion

Vous pouvez également le visualiser côté Web

micro web
Copier après la connexion
Copier après la connexion

S'il n'y a pas d'erreur, vous pouvez le voir le service a été enregistré avec succès.

$ micro list services
go.micro.web
greeter
Copier après la connexion

Test

Vous pouvez maintenant exécuter le client pour le tester

go run client.go greeter.pb.go greeter.pb.micro.go
Copier après la connexion

J'ai eu un problème lors du test, le service a été enregistré, mais lorsque le client l'appelle, il renvoie

{"id":"go.micro.client","code":408,"detail":"context deadline exceeded","status":"Request Timeout"}panic: runtime error: invalid memory address or nil pointer dereference[signal 0xc0000005 code=0x0 addr=0x28 pc=0xeef454]
Copier après la connexion

Vérifiez les informations du service

micro get service greeter
Copier après la connexion
$ micro get service greeter                                                                                    
service  greeter                                                                                               

version latest                                                                                                 

ID      Address Metadata                                                                                       
greeter-5d86321e-86f2-41a6-8230-f015466bf791    10.198.75.60:51395      broker=http,protocol=grpc,registry=mdns,server=grpc,transport=grpc                                                                                    

Endpoint: Greeter.Hello                                                                                        

Request: {                                                                                                     
        message_state MessageState {                                                                           
                no_unkeyed_literals NoUnkeyedLiterals                                                          
                do_not_compare DoNotCompare                                                                    
                do_not_copy DoNotCopy                                                                          
                message_info MessageInfo                                                                       
        }                                                                                                      
        int32 int32                                                                                            
        unknown_fields []uint8                                                                                 
        name string                                                                                            
}                                                                                                              Response: {                                                                                                    
        message_state MessageState {                                                                           
                no_unkeyed_literals NoUnkeyedLiterals                                                          
                do_not_compare DoNotCompare                                                                    
                do_not_copy DoNotCopy                                                                          
                message_info MessageInfo                                                                       
        }                                                                                                      
        int32 int32                                                                                            
        unknown_fields []uint8                                                                                 
        greeting string                                                                                        
}
Copier après la connexion

Faites attention à l'adresse IP à l'intérieur, elle est enregistrée sous

10.198.xx , est c'est pourquoi une erreur est signalée ? ? ? Ainsi lors de l'enregistrement du service, précisez l'adresse IP

go run server.go greeter.pb.go greeter.pb.micro.go --server_address=localhost:8888
Copier après la connexion

À ce moment, il n'y aura aucune erreur si vous l'appelez avec le client.

$ go run client.go greeter.pb.go greeter.pb.micro.go
Hello Zaun pianist
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!

Étiquettes associées:
source:learnku.com
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