Maison > Article > développement back-end > 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.
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 pull micro/micro
# 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 githubhttps://github.com/micro/micro/releases
micro webSortie
$ 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-ce304f179657Visitez maintenant
pour voir la page Web du micro. localhost:8082
Adresse de téléchargement du protocole
https://github.com/protocolbuffers/protobuf/releasesAprè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
, server.go
, client.go
greeter.proto
syntax = "proto3";package protos;service Greeter { rpc Hello (Request) returns (Response){};}message Request { string name = 1;}message Response { string greeting = 2;}
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) }}
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 modmodule 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
protoc --micro_out=. --go_out=. greeter.proto
greeter.pb.go
greeter.pb.micro.go
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.goVous pouvez utiliser micro pour afficher les microservices en cours d'exécution
micro list servicesVous pouvez également le visualiser côté Web
micro webS'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
go run client.go greeter.pb.go greeter.pb.micro.goJ'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!