В мире микросервисов и распределенных систем решающее значение имеет эффективная связь между сервисами. Именно здесь в игру вступает gRPC, высокопроизводительная среда RPC (удаленный вызов процедур), разработанная Google. В сочетании с Go, статически типизированным, компилируемым языком программирования, разработанным для простоты и эффективности, gRPC может помочь вам создавать надежные и масштабируемые веб-сервисы.
gRPC означает google Rэмоцию Pпроцедуру Call. Это платформа с открытым исходным кодом, которая использует HTTP/2 для транспорта, протокольные буферы в качестве языка описания интерфейса и предоставляет такие функции, как аутентификация, балансировка нагрузки и многое другое. gRPC позволяет вам определять методы обслуживания и типы сообщений в файле .proto, который затем можно использовать для генерации клиентского и серверного кода на нескольких языках.
### Предварительные требования
Прежде чем начать, убедитесь, что у вас установлено следующее:
Вы можете установить плагины Go, используя следующие команды:
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
Обновите PATH, чтобы компилятор протокола мог найти плагины:
export PATH="$PATH:$(go env GOPATH)/bin"
Подтвердите, что протокол установлен и настроен в вашей системе, открыв терминал и набрав:
protoc --version
Вы должны увидеть результат, похожий на этот
C:\Users\Guest>protoc --version ~ libprotoc 27.3
Если он не распознает команду protoc, вы можете использовать Chocolatey для Windows для установки буферов протокола:
choco install protoc
Если это не так, если у вас не установлен Chocolatey или вы используете другую ОС, вы можете просмотреть официальную документацию по установке здесь.
Создайте файл .proto, чтобы определить службу gRPC. Например:
helloworld.proto
syntax = "proto3"; package helloworld; message HelloRequest { string name = 1; } message HelloResponse { string message = 1; } service Greeter { rpc SayHello (HelloRequest) returns (HelloResponse) {} }
Сгенерируйте код Go из вашего файла .proto:
protoc --go_out=. --go-grpc_out=. helloworld.proto
Создайте сервер в Go:
server.go
package main import ( "context" "log" "net" "google.golang.org/grpc" pb "path/to/your/proto" ) type server struct { pb.GreeterServer } func main() { lis, err := net.Listen("tcp", ":8080") if err != nil { log.Fatalf("failed to listen: %v", err) } log.Printf("Server started at %v", lis.Addr()) grpcServer := grpc.NewServer() pb.RegisterGreeterServer(grpcServer, &server{}) if err := grpcServer.Serve(lis); err != nil { log.Fatalf("failed to serve: %v", err) } } // SayHello name should be the same RPC name as defined in your proto file func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloResponse, error) { return &pb.HelloResponse{Message: "Hello " in.Name}, nil }
Создайте клиент в Go:
client.go
package main import ( "context" "log" "os" "time" "google.golang.org/grpc" pb "path/to/your/proto" ) func main() { conn, err := grpc.NewClient("localhost:8080", grpc.WithTransportCredentials(insecure.NewCredentials())) if err != nil { log.Fatalf("did not connect: %v", err) } defer conn.Close() client := pb.NewGreeterClient(conn) name := "John Doe" if len(os.Args) > 1 { name = os.Args[1] } callSayHello( client, name ) } func callSayHello(client pb.GrpcServiceClient, name string) { ctx, cancel := context.WithTimeout(context.Background(), time.Second) defer cancel() res, err := client.SayHello(ctx, &pb.HelloRequest{Name: name}) if err != nil { log.Fatalf("Failed to called: %v", err) } log.Printf("%v", res) }
gRPC и Go вместе представляют собой мощную комбинацию для создания высокопроизводительных масштабируемых веб-сервисов. Используя сильные стороны обоих, вы можете создавать эффективные и надежные приложения, которые легко поддерживать и расширять.
Ссылка на демо-репозиторий: Github.com
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3