Maison  >  Article  >  développement back-end  >  Comment configurer l'environnement de développement go-micro

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

藏色散人
藏色散人avant
2020-08-12 13:58:503011parcourir
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

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

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"

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

Testez-le

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

micro web

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

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

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

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;}

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)
    }}

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)}

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)

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

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

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

micro list services

Vous pouvez également le visualiser côté Web

micro web

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

Test

Vous pouvez maintenant exécuter le client pour le tester

go run client.go greeter.pb.go greeter.pb.micro.go

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]

Vérifiez les informations du service

micro get service greeter
$ 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                                                                                        
}

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

À 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

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer