C# ile gRPC hizmeti oluşturma

1. Genel Bakış

gRPC Google'da geliştirilen, dilden bağımsız, platform açısından bağımsız bir uzak prosedür çağrısı (RPC) çerçevesi ve araç setidir. Özellikle güçlü bir ikili program serileştirme araç seti ve dili olan Protokol Arabelleklerini kullanarak hizmet tanımlamanızı sağlar. Daha sonra çeşitli dillerde hizmet tanımınızdan deyimsel istemci ve sunucu kökleri oluşturmanıza olanak tanır.

Bu codelab'de, gRPC çerçevesini kullanarak API sunan bir C# hizmeti oluşturmayı öğreneceksiniz. Bu hizmetle etkileşime geçmek için, C# dilinde yazılmış ve hizmetle aynı hizmet açıklamasını kullanan bir konsol istemcisi kullanılır.

Neler öğreneceksiniz?

  • Protokol Arabelleği dili.
  • C# kullanarak gRPC hizmeti uygulama.
  • C# kullanarak gRPC istemcisi uygulama.
  • gRPC hizmeti nasıl güncellenir?

Gerekenler

Bu eğiticiden nasıl yararlanacaksınız?

Yalnızca okuma Okuyun ve alıştırmaları tamamlayın

Google Cloud Platform deneyiminizi nasıl değerlendirirsiniz?

Acemi Orta Yeterli

2. gRPC C# örneklerini indirme ve derleme

Örnekleri indir

gRPC C# örneğini zip dosyası olarak indirin ve ayıklayın.

Alternatif olarak, git deposunu klonlayabilirsiniz.

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

Her iki durumda da, aşağıdaki içeriğe sahip bir grpc-samples-dotnet klasörünüz olmalıdır:

d056832ff4ce0c8f.png

Çözümü oluşturun

Örnek uygulama klasörü, bir Visual Studio çözümü olan GrpcSamples.sln değerini içerir. Çözümü Visual Studio'da açmak için çift tıklayın. Bir dizi proje içeren bir çözüm göreceksiniz.

61da9ddc86c08019.png

Bir sonraki bölümde projelere daha ayrıntılı bir şekilde değineceğiz ama önce projeyi oluşturalım. Çözümü oluşturmak için Build > Build Solution veya Ctrl + Shift + B sayfasını ziyaret edin. Bu işlem, tüm bağımlıları NuGet'ten indirip uygulamayı derler.

Sonunda, Visual Studio konsol çıkışında Build succeeded mesajı görürsünüz.

3. Karşılayıcı örneğini keşfedin

Karşılayıcı, bir istemcinin adı olan bir istek gönderdiği ve sunucunun, ardından adı geçen bir mesajla yanıt verdiği basit bir gRPC örneğidir. İstemci ile sunucunun temel aldığı ortak hizmet tanımını (proto dosyası) içeren bir Greeter projesi mevcut.

Greeter Projesi

Bu, istemci ile sunucu arasında paylaşılan ortak projedir. İstemci ve sunucunun kullandığı gRPC hizmet tanımı olan bir greeter.proto içerir. Hizmet tanımı, GreetingService adlı bir gRPC hizmetini tanımlar ve HelloRequest öğesini giriş ve HelloResponse öğesini çıkış olarak alan bir greeting yöntemine sahiptir.

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

Bu, istemcinin tek bir istek gönderdiği ve sunucudan tek bir yanıt aldığı tekli (akışsız) bir yöntemdir. greeter.proto. içeriğinin geri kalanını keşfedebilirsiniz. Bu projede, proto dosyasından istemci ve sunucu saplamaları oluşturmak için kullanılabilecek generate_protos.bat adlı bir komut dosyası da bulunur. Projede zaten oluşturulmuş istemci ve sunucu taslakları bulunduğundan bunları kendi başınıza oluşturmanız gerekmez. Ancak, hizmet tanım dosyasında bir şeyi değiştirirseniz saplamaları yeniden oluşturmak için bu komut dosyasını çalıştırmanız gerekir.

Karşılama Sunucusu

Bu, gRPC sunucusu projesidir. Program.cs, bağlantı noktası ve sunucu uygulamasının ayarlandığı ana giriş noktasıdır. GreeterServiceImpl.cs önemli sınıf. Gerçek işlevselliğin uygulandığı bir greeting yöntemi içerir.

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

Greeter Müşterisi

Bu, gRPC hizmetinin istemci tarafıdır. Ayrıca giriş noktası olarak Program.cs var. Sunucuyla konuşmak için bir kanal oluşturur, ardından oluşturulan saplamadan bu kanalı kullanarak bir istemci oluşturur. Ardından bir istek oluşturur ve istemci saplanmasını kullanarak bunu sunucuya gönderir.

4. Karşılayıcı örneğini çalıştır

İlk olarak Karşılayıcı Sunucusu'nu başlatın. Bir komut istemi açın, Karşılayıcı Sunucusu'nun bin > Debug klasörüne gidin ve yürütülebilir dosyayı çalıştırın. Sunucu sizi dinleyecektir.

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

Ardından, Karşılayıcı İstemciyi çalıştırın. Ayrı bir komut isteminde, Karşılayıcı Sunucusu'nun bin > Debug klasörüne gidin ve yürütülebilir dosyayı çalıştırın. İstemcinin isteği gönderdiğini ve sunucudan yanıt aldığını görmeniz gerekir.

> 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. Karşılayıcı örneğini güncelleme

Şimdi hizmetimizi nasıl güncelleyeceğinize bakalım. gRPC hizmetimize, müşteriye merhaba yerine veda döndüren "bye" adlı yeni bir yöntem ekleyin.

İlk adım, greeter.proto. hizmet tanımı dosyasını güncellemektir

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

Daha sonra, istemci ve sunucu saplamalarını yeniden oluşturmanız gerekir. Bir komut isteminde generate_protos.bat komutunu çalıştırın. Koçanlar oluşturulduktan sonra, güncellenmiş kodu almak için Visual Studio projelerinizi yenilemeniz gerekebilir.

Son olarak, yeni yöntemden yararlanmak için istemci ve sunucu kodunu güncelleyin. Hizmette GreeterServiceImpl.cs uygulamasını güncelleyin ve yeni bir goodbye yöntemi ekleyin.

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

İstemcide, Program.cs. içindeki goodbye yöntemine çağrı yapın

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

Projeyi yeniden derleyip sunucuyu ve istemciyi tekrar çalıştırın. Müşterinin veda mesajı aldığını göreceksiniz.

> 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. Chat örneğini keşfedin

Çözümde ChatServer ve ChatWindowsClient projesi de bulunur. Adından da anlaşılacağı gibi bu, basit bir sohbet uygulaması için kullanılan bir istemci ve sunucu çiftidir. Chat projesinde chat.proto adlı hizmet tanımı dosyası bulunuyor. chat yöntemine sahip bir ChatService tanımlar.

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

Burada önemli olan nokta, hem gelen hem de giden sohbet mesajlarının stream anahtar kelimesiyle işaretlenmesidir. Bu temel olarak bağlantıyı, istemci ile sunucunun istedikleri zaman birbirine ileti gönderebildiği çift yönlü bir akışa dönüştürür; için mükemmel bir çözümdür.

Örneği daha ayrıntılı olarak inceleyebilir, derleyip çalıştırarak alıştırma olarak nasıl çalıştığını görebilirsiniz.

7. Tebrikler!

İşlediklerimiz

  • Protokol Arabellek Dili.
  • C# kullanarak gRPC hizmeti uygulama.
  • C# kullanarak gRPC istemcisi uygulama.
  • gRPC hizmeti nasıl güncellenir?

Sonraki Adımlar