Membuat layanan gRPC dengan C#

1. Ringkasan

gRPC adalah framework dan toolset remote procedure call (RPC) yang tidak bergantung pada bahasa dan platform yang dikembangkan di Google. Dengan alat ini, Anda dapat menentukan layanan menggunakan Protocol Buffers, yaitu set alat dan bahasa serialisasi biner yang sangat canggih. Kemudian, Anda dapat membuat stub klien dan server idiomatik dari definisi layanan dalam berbagai bahasa.

Dalam codelab ini, Anda akan mempelajari cara membuat 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.

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 gRPC C#

Download sampel

Download repositori contoh gRPC C# sebagai file ZIP, lalu ekstrak.

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

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

Bagaimanapun, Anda harus memiliki folder grpc-samples-dotnet dengan konten berikut:

d056832ff4ce0c8f.png

Membangun solusi

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

61da9ddc86c08019.png

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

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

3. Mempelajari contoh Greeter

Greeter adalah contoh gRPC sederhana di mana klien mengirim permintaan dengan nama dan server merespons dengan pesan yang diikuti dengan nama. Ada project Greeter yang mencakup definisi layanan umum (file proto) yang menjadi dasar klien dan server.

Greeter Project

Ini adalah project umum yang dibagikan antara klien dan server. API ini memiliki greeter.proto yang merupakan definisi layanan gRPC yang digunakan oleh klien dan server. Definisi layanan menentukan layanan gRPC yang disebut GreetingService dan memiliki metode greeting yang menerima HelloRequest sebagai input dan HelloResponse sebagai output.

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

Ini adalah metode unary (yaitu tanpa streaming) tempat klien mengirim satu permintaan 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 sudah berisi stub klien dan server yang dibuat, sehingga Anda tidak perlu membuatnya sendiri. Namun, jika Anda mengubah sesuatu tentang file definisi layanan, Anda harus menjalankan skrip ini untuk membuat ulang stub.

Server Penyambut

Ini adalah project untuk server gRPC. Program.cs adalah titik entri utama tempat implementasi server dan port disiapkan. Class pentingnya adalah GreeterServiceImpl.cs. 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 Penyapa

Ini adalah sisi klien dari layanan gRPC. Ini juga memiliki Program.cs sebagai titik entri. Aplikasi ini membuat saluran untuk berkomunikasi dengan server, lalu membuat klien dengan saluran dari stub yang dihasilkan. Kemudian, klien membuat permintaan dan mengirimkannya ke server menggunakan stub klien.

4. Menjalankan contoh Greeter

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

> 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 tampilan saat layanan kami diperbarui. Tambahkan metode baru ke layanan gRPC kami yang disebut goodbye yang menampilkan goodbye, bukan hello, ke klien.

Langkah pertama adalah memperbarui 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 memuat ulang project Visual Studio untuk mendapatkan kode yang telah diupdate.

Terakhir, perbarui kode klien dan server untuk memanfaatkan metode baru. Di layanan, perbarui 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);

Bangun ulang project, lalu jalankan server dan klien lagi. Anda akan melihat klien menerima pesan perpisahan 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. Seperti namanya, ini adalah pasangan klien dan server untuk aplikasi chat sederhana. Project Chat memiliki file definisi layanan yang disebut chat.proto. Contoh ini menentukan ChatService dengan metode chat.

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

Yang penting di sini adalah pesan chat yang masuk dan keluar ditandai dengan kata kunci stream. Pada dasarnya, hal ini mengubah koneksi menjadi aliran dua arah tempat klien dan server dapat mengirim pesan satu sama lain kapan saja; solusi sempurna untuk aplikasi chat.

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

7. Selamat!

Yang telah kita bahas

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

Langkah Berikutnya