マイクロサービスと分散システムの世界では、サービス間の効率的な通信が非常に重要です。ここで、Google が開発した高性能 RPC (Remote Procedure Call) フレームワークである gRPC が登場します。シンプルさと効率性を追求して設計された静的に型付けされ、コンパイルされたプログラミング言語である Go と組み合わせると、gRPC は堅牢でスケーラブルな Web サービスの構築に役立ちます。
gRPC は、google Remote Procedure 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
protoc コンパイラーがプラグインを見つけられるように PATH を更新します:
export PATH="$PATH:$(go env GOPATH)/bin"
ターミナルを開いて次のように入力して、protoc がシステムにインストールされ構成されていることを確認します:
protoc --version
次のような出力が表示されるはずです
C:\Users\Guest>protoc --version ~ libprotoc 27.3
protoc コマンドが認識されない場合は、Windows 用 Chocolatey を使用してプロトコル バッファをインストールできます:
choco install protoc
これに当てはまらない場合、chocolatey がインストールされていない場合、または別の OS を使用している場合は、ここで公式のインストール ドキュメントを参照してください。
gRPC サービスを定義する .proto ファイルを作成します。例えば:
helloworld.proto
syntax = "proto3"; package helloworld; message HelloRequest { string name = 1; } message HelloResponse { string message = 1; } service Greeter { rpc SayHello (HelloRequest) returns (HelloResponse) {} }
.proto ファイルから Go コードを生成します:
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 は、高性能でスケーラブルな Web サービスを構築するための強力な組み合わせを提供します。両方の長所を活用することで、保守と拡張が簡単な、効率的で信頼性の高いアプリケーションを作成できます。
デモ リポジトリへのリンク: Github.com
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3