gRPC Servisi Oluşturma: Protocol Buffers ile Başlama

gRPC, Google tarafından geliştirilen yüksek performanslı RPC framework'üdür. Protocol Buffers (protobuf) ile veri serileştirmesi yaparak HTTP/2 üzerinden iletişim sağlar. REST API'den çok daha hızlı ve verimlidi; microservices mimarisinde sıkça kullanılır.

İlk gRPC servisinizi Go ile oluşturalım. Önce gerekli araçları kurun.

1go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
2go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest

Protocol Buffer tanım dosyasını oluşturun. `hello.proto` adıyla kaydettikten sonra servis ve mesaj yapılarını tanımlayın.

1syntax = "proto3";
2
3package hello;
4
5option go_package = "hello/pb";
6
7message HelloRequest {
8string name = 1;
9}
10
11message HelloReply {
12string message = 1;
13}
14
15service Greeter {
16rpc SayHello(HelloRequest) returns (HelloReply);
17}

Proto dosyasından Go kodunu üretin.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1protoc --go_out=. --go-grpc_out=. hello.proto

Bu komut `pb` klasöründe `hello.pb.go` ve `hello_grpc.pb.go` dosyalarını oluşturur. Şimdi sunucu implementasyonunu yazın. `server.go` dosyasını oluşturun.

1package main
2
3import (
4"context"
5"fmt"
6"net"
7"google.golang.org/grpc"
8"hello/pb"
9)
10
11type server struct {
12pb.UnimplementedGreeterServer
13}
14
15func (s *server) SayHello(ctx context.Context, req *pb.HelloRequest) (*pb.HelloReply, error) {
16return &pb.HelloReply{Message: fmt.Sprintf("Merhaba, %s!", req.Name)}, nil
17}
18
19func main() {
20lis, _:= net.Listen("tcp", ":50051")
21s:= grpc.NewServer()
22pb.RegisterGreeterServer(s, &server{})
23fmt.Println("Sunucu 50051 portunda çalışıyor...")
24s.Serve(lis)
25}
26[/cod]
27
28İstemci kodu oluşturun. `client.go` dosyasına yazın.
29
30[kod]
31package main
32
33import (
34"context"
35"fmt"
36"google.golang.org/grpc"
37"google.golang.org/grpc/credentials/insecure"
38"hello/pb"
39)
40
41func main() {
42conn, _:= grpc.Dial("localhost:50051", grpc.WithTransportCredentials(insecure.NewCredentials()))
43defer conn.Close()
44
45c:= pb.NewGreeterClient(conn)
46resp, _:= c.SayHello(context.Background(), &pb.HelloRequest{Name: "Ahmet"})
47fmt.Println(resp.Message)
48}

Sunucuyu ve istemciyi çalıştırın.

1go run server.go
2go run client.go

Beklenen çıktı: `Merhaba, Ahmet!`

Sık yapılan hata: protoc komutlarında path yanlış veya modül tanımlanmamışsa `go mod init hello` komutuyla Go modülünü başlatın. gRPC bağlantı sırasında sunucunun çalışmadığı durumlarda bağlantı hatası alırsınız; sunucuyu önce başlatmayı unutmayın.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz