Dopo aver progettato il tuo servizio gRPC con il DSL di Goa, è il momento di dargli vita! Questa guida ti accompagnerà attraverso l’implementazione del tuo servizio passo dopo passo. Imparerai come:
main.go
per avviare il tuo server gRPC.Prima, generiamo tutto il codice gRPC necessario. Dalla radice del tuo progetto (es. grpcgreeter/
), esegui:
goa gen grpcgreeter/design
go mod tidy
Questo comando analizza il tuo design gRPC (greeter.go
) e genera il codice richiesto nella directory gen/
. Ecco cosa viene creato:
gen/
├── grpc/
│ └── greeter/
│ ├── pb/ # Definizioni Protocol Buffers
│ ├── server/ # Codice gRPC lato server
│ └── client/ # Codice gRPC lato client
└── greeter/ # Interfacce e tipi del servizio
goa gen
ogni volta che modifichi il tuo design per mantenere il codice generato sincronizzato con la definizione del tuo servizio.gen/grpc/greeter/pb/
Contiene gli artefatti protobuf:
greeter.proto
SayHello
.greeter.pb.go
: Il codice Go compilato dal file .proto
server.go
: Mappa i metodi del tuo servizio agli handler gRPCencode_decode.go
: Converte tra i tipi del tuo servizio e i messaggi gRPCtypes.go
: Contiene definizioni di tipi specifiche del serverclient.go
: Implementazione del client gRPCencode_decode.go
: Logica di serializzazione lato clienttypes.go
: Definizioni di tipi specifiche del clientOra la parte divertente - implementare la logica del tuo servizio! Crea un nuovo file chiamato greeter.go
nel tuo package del servizio:
package greeter
import (
"context"
"fmt"
// Usa un alias descrittivo per il package generato
gengreeter "grpcgreeter/gen/greeter"
)
// GreeterService implementa l'interfaccia Service
type GreeterService struct{}
// NewGreeterService crea una nuova istanza del servizio
func NewGreeterService() *GreeterService {
return &GreeterService{}
}
// SayHello implementa la logica di saluto
func (s *GreeterService) SayHello(ctx context.Context, p *gengreeter.SayHelloPayload) (*gengreeter.SayHelloResult, error) {
// Aggiungi validazione dell'input se necessario
if p.Name == "" {
return nil, fmt.Errorf("il nome non può essere vuoto")
}
// Costruisci il saluto
greeting := fmt.Sprintf("Ciao, %s!", p.Name)
// Restituisci il risultato
return &gengreeter.SayHelloResult{
Greeting: greeting,
}, nil
}
Infine, dobbiamo creare un file main.go
per avviare il nostro server gRPC. Crea un file in cmd/grpcgreeter/main.go
:
package main
import (
"log"
"net"
"google.golang.org/grpc"
"google.golang.org/grpc/reflection"
// Importa i package generati
gengreeter "grpcgreeter/gen/greeter"
pb "grpcgreeter/gen/grpc/greeter/pb"
genserver "grpcgreeter/gen/grpc/greeter/server"
)
func main() {
// Crea un listener TCP sulla porta 8080
lis, err := net.Listen("tcp", ":8080")
if err != nil {
log.Fatalf("Impossibile ascoltare sulla porta 8080: %v", err)
}
// Crea un server gRPC
grpcServer := grpc.NewServer()
// Istanzia il tuo servizio
svc := NewGreeterService()
// Convertilo in endpoint Goa e registralo con gRPC
endpoints := gengreeter.NewEndpoints(svc)
pb.RegisterGreeterServer(grpcServer, genserver.New(endpoints, nil))
// Abilita la reflection del server per strumenti come grpcurl
reflection.Register(grpcServer)
log.Printf("Server gRPC in ascolto su :8080")
if err := grpcServer.Serve(lis); err != nil {
log.Fatalf("Server gRPC fallito: %v", err)
}
}
net.Listen("tcp", ":8080")
: Apre la porta 8080
per le richieste gRPC in arrivo.grpc.NewServer()
: Istanzia un server gRPC base.NewGreeterService()
: Crea il tuo servizio personalizzato.gengreeter.NewEndpoints(svc)
: Avvolge il tuo servizio in endpoint Goa
indipendenti dal trasporto.RegisterGreeterServer(...)
: Informa il server gRPC dei tuoi metodi.Ora che il nostro servizio è implementato, possiamo testarlo. Compila ed esegui il server:
go build ./cmd/grpcgreeter
./grpcgreeter
In un altro terminale, puoi utilizzare grpcurl
per testare il servizio:
# Elenca i servizi disponibili
grpcurl -plaintext localhost:8080 list
# Visualizza i metodi del servizio greeter
grpcurl -plaintext localhost:8080 list greeter.Greeter
# Invia una richiesta di saluto
grpcurl -plaintext -d '{"name": "Goa"}' localhost:8080 greeter.Greeter/SayHello
Dovresti vedere una risposta come:
{
"greeting": "Ciao Goa!"
}
Congratulazioni! Hai creato con successo un servizio gRPC funzionante utilizzando Goa. Da qui puoi:
Questo tutorial fa parte di una serie più ampia sulla creazione di servizi con Goa. Per una panoramica completa, torna alla pagina principale dei tutorial.
Dopo aver completato questo tutorial, la struttura del tuo progetto dovrebbe assomigliare a questa:
grpcgreeter/
├── cmd/
│ └── grpcgreeter/
│ └── main.go
├── design/
│ └── design.go
├── gen/
│ ├── greeter/
│ │ ├── client.go
│ │ ├── endpoints.go
│ │ └── service.go
│ └── grpc/
│ └── greeter/
│ ├── client/
│ ├── pb/
│ └── server/
├── greeter.go
└── go.mod
Se riscontri problemi nell’avvio del server, verifica:
go mod tidy
Se incontri errori durante la compilazione:
goa gen
Se il client non riesce a connettersi:
Quando distribuisci il tuo servizio gRPC in produzione, considera:
Per maggiori dettagli sulla sicurezza, consulta la guida alla sicurezza.
Per ottimizzare le prestazioni del tuo servizio gRPC:
Per approfondimenti sulle prestazioni, consulta la guida all’ottimizzazione.
Per mantenere il tuo servizio gRPC in salute:
Goa si integra facilmente con strumenti di osservabilità come OpenTelemetry. Per maggiori dettagli, consulta la guida all’osservabilità.
In questo tutorial, abbiamo:
Ora hai una solida base per costruire servizi gRPC più complessi con Goa. Ricorda di consultare la documentazione di riferimento per informazioni dettagliate su tutte le funzionalità disponibili.
Se hai domande o incontri difficoltà, non esitare a:
Il prossimo tutorial nella serie è Gestione degli Errori, dove imparerai a gestire in modo robusto gli errori nei tuoi servizi gRPC.
Prossimo tutorial: Gestione degli Errori
Tutorial precedente: Progettazione del Servizio
Ultimo aggiornamento: [DATA_AGGIORNAMENTO]
Contributori: Team Goa
Licenza: MIT
Questo documento è parte della documentazione ufficiale di Goa.
Per segnalare errori o suggerire miglioramenti a questa pagina, usa il pulsante “Edit this page” in fondo.
Parole chiave: gRPC, Goa, Go, microservizi, API, tutorial, implementazione, server, client
Tempo di lettura stimato: 15 minuti
Livello di difficoltà: Intermedio
Autore: Team Goa Data di pubblicazione: Febbraio 2024 Ultima modifica: Febbraio 2024
Prerequisiti:
Strumenti necessari:
Codice sorgente completo disponibile su: GitHub
Indice dei contenuti:
Questo tutorial è stato verificato con:
Nota: Se stai utilizzando versioni diverse, potresti dover adattare alcuni comandi o output mostrati in questo tutorial.
Prossimo tutorial: Gestione degli Errori
Tutorial precedente: Progettazione del Servizio
Hai trovato un errore o vuoi contribuire a migliorare questa pagina? Modifica su GitHub
Tag: #goa #grpc #golang #microservizi #tutorial #implementazione #server #api
Categoria: Tutorial Sottocategoria: gRPC Livello: Intermedio
Fine del documento