Membuat layanan gRPC dengan C#

1. Ringkasan

gRPC adalah framework dan rangkaian alat panggilan prosedur (RPC) jarak jauh yang tidak tergantung bahasa dan platform yang dikembangkan di Google. Library ini memungkinkan Anda menentukan layanan menggunakan Protocol Buffers, yakni rangkaian alat dan bahasa serialisasi biner yang sangat andal. Kemudian, Anda dapat membuat stub klien dan server idiomatis dari definisi layanan dalam berbagai bahasa.

Dalam codelab ini, Anda akan mempelajari cara membangun layanan C# yang mengekspos API menggunakan framework gRPC. Anda berinteraksi dengan layanan ini menggunakan klien konsol yang ditulis dalam C# yang menggunakan deskripsi layanan yang sama dengan layanan tersebut.

Yang akan Anda pelajari

  • Bahasa Buffering Protokol.
  • Cara menerapkan layanan gRPC menggunakan C#.
  • Cara menerapkan klien gRPC menggunakan C#.
  • Cara mengupdate layanan gRPC.

Yang Anda butuhkan

Bagaimana Anda akan menggunakan tutorial ini?

Hanya membacanya Membacanya dan menyelesaikan latihan

Bagaimana penilaian Anda terhadap pengalaman dengan Google Cloud Platform?

Pemula Menengah Mahir

2. Mendownload dan membuat contoh C# gRPC

Download contoh

Download repositori contoh gRPC C# sebagai file ZIP dan ekstrak.

Atau, Anda dapat meng-clone repositori git-nya.

git clone https://github.com/meteatamel/grpc-samples-dotnet.git

Apa pun langkah yang diambil, Anda harus memiliki folder grpc-samples-dotnet dengan konten berikut:

d056832ff4ce0c8f.png

Membangun lapisan

Folder aplikasi contoh berisi GrpcSamples.sln, sebuah solusi Visual Studio. Klik dua kali untuk membuka solusi di Visual Studio. Anda akan melihat solusi dengan sejumlah project.

61da9ddc86c08019.pngS

Kita akan membahas project secara lebih mendetail di bagian berikutnya, tetapi pertama-tama, mari kita buat project-nya. Buka Build > Build Solution atau Ctrl + Shift + B untuk membuat solusi. Ini akan mendownload semua dependensi dari NuGet, lalu mengompilasi aplikasi.

Pada akhirnya, Anda akan melihat pesan Build succeeded di output konsol Visual Studio.

3. Pelajari contoh Greeter

Greeter adalah contoh gRPC sederhana tempat klien mengirimkan permintaan dengan nama dan server merespons dengan pesan yang diikuti dengan nama. Ada project Greeter yang menyertakan definisi layanan umum (file proto) yang menjadi dasar klien dan server.

Project Greeter

Project ini adalah project umum yang digunakan bersama oleh klien dan server. Library ini memiliki greeter.proto yang merupakan definisi layanan gRPC yang digunakan klien dan server. Definisi layanan menentukan layanan gRPC yang disebut GreetingService dan memiliki metode greeting yang menggunakan HelloRequest sebagai input dan HelloResponse sebagai output.

service GreetingService {
    rpc greeting(HelloRequest) returns (HelloResponse);
}

Ini adalah metode unary (yaitu tanpa streaming) tempat klien mengirimkan permintaan tunggal dan mendapatkan satu respons dari server. Anda dapat menjelajahi konten greeter.proto. lainnya. Project ini juga memiliki skrip bernama generate_protos.bat yang dapat digunakan untuk membuat stub klien dan server dari file proto. Project ini sudah berisi stub klien dan server yang dihasilkan, sehingga Anda tidak perlu membuatnya sendiri. Namun, jika Anda mengubah sesuatu pada file definisi layanan, Anda perlu menjalankan skrip ini untuk membuat ulang stub.

Server Greeter

Ini adalah project untuk server gRPC. Program.cs adalah titik entri utama tempat implementasi port dan server disiapkan. Class yang penting adalah GreeterServiceImpl.cs. Class ini memiliki metode greeting tempat fungsi sebenarnya diimplementasikan.

public override Task<HelloResponse> greeting(HelloRequest request,
       ServerCallContext context)
{
    return Task.FromResult(new HelloResponse { 
          Greeting = "Hello " + request.Name });
}

Klien Greeter

Ini adalah sisi klien layanan gRPC. Class ini juga memiliki Program.cs sebagai titik entri. Fungsi ini membuat saluran untuk berbicara dengan server, lalu membuat klien dengan saluran tersebut dari stub yang dihasilkan. Langkah ini kemudian membuat permintaan dan mengirimkannya ke server menggunakan stub klien.

4. Menjalankan contoh Greeter

Pertama, mulai Server Greeter. Buka command prompt, lalu buka folder bin > Debug Greeter Server, lalu jalankan file yang dapat dieksekusi. Anda akan melihat server mendengarkan.

> C:\grpc-samples-dotnet\GreeterServer\bin\Debug>GreeterServer.exe
GreeterServer listening on port 50051
Press any key to stop the server...

Selanjutnya, jalankan Greeter Client. Di command prompt terpisah, buka folder bin > Debug Greeter Server, lalu jalankan file yang dapat dieksekusi. Anda akan melihat klien mengirim permintaan dan menerima respons dari server.

> C:\grpc-samples-dotnet\GreeterClient\bin\Debug>GreeterClient.exe
GreeterClient sending request
GreeterClient received response: Hello Mete - on C#
Press any key to exit...

5. Memperbarui contoh Greeter

Mari kita lihat seperti apa pembaruan layanan kita. Menambahkan metode baru ke layanan gRPC yang disebut selamat tinggal yang menampilkan selamat tinggal, bukan menyapa klien.

Langkah pertama adalah mengupdate file definisi layanan greeter.proto.

service GreetingService {
    rpc greeting(HelloRequest) returns (HelloResponse);
    
    rpc goodbye(HelloRequest) returns (HelloResponse);
}

Selanjutnya, Anda perlu membuat ulang stub klien dan server. Di command prompt, jalankan generate_protos.bat. Setelah stub dibuat, Anda mungkin perlu me-refresh project Visual Studio untuk mendapatkan kode yang telah diupdate.

Terakhir, perbarui kode klien dan server untuk memanfaatkan metode baru ini. Di layanan, update GreeterServiceImpl.cs dan tambahkan metode goodbye baru.

public override Task<HelloResponse> goodbye(HelloRequest request,
       ServerCallContext context)
{
    return Task.FromResult(new HelloResponse { 
          Greeting = "Goodbye " + request.Name });
}

Di klien, lakukan panggilan ke metode goodbye di Program.cs.

response = client.goodbye(request);
Console.WriteLine("GreeterClient received response: " 
                       + response.Greeting);

Build ulang project dan jalankan kembali server dan klien. Anda akan melihat klien menerima pesan selamat tinggal sekarang.

> C:\grpc-samples-dotnet\GreeterClient\bin\Debug>GreeterClient.exe
GreeterClient sending request
GreeterClient received response: Hello Mete - on C#
GreeterClient received response: Goodbye Mete - on C#
Press any key to exit...

6. Mempelajari contoh Chat

Ada juga project ChatServer dan ChatWindowsClient dalam solusi tersebut. Seperti namanya, ini adalah pasangan klien dan server untuk aplikasi {i>chat<i} sederhana. Project Chat memiliki file definisi layanan bernama chat.proto. Class ini menentukan ChatService dengan metode chat.

service ChatService {
 rpc chat(stream ChatMessage) returns (stream ChatMessageFromServer);
}

Hal yang penting di sini adalah pesan chat masuk dan keluar ditandai dengan kata kunci stream. Pada dasarnya, koneksi berubah menjadi aliran dua arah di mana klien dan server dapat saling berkirim pesan kapan saja; solusi tepat untuk aplikasi obrolan.

Anda dapat menjelajahi lebih lanjut contoh, membangun dan menjalankannya untuk melihat cara kerjanya sebagai latihan.

7. Selamat!

Yang telah kita bahas

  • {i>Protocol Buffer Language<i} (Bahasa Penyangga Protokol).
  • Cara menerapkan layanan gRPC menggunakan C#.
  • Cara menerapkan klien gRPC menggunakan C#.
  • Cara mengupdate layanan gRPC.

Langkah Berikutnya