.NET üzerinde gRPC'ye genel bakış

Yayınlayan James Newton-King

gRPC dilden bağımsız, yüksek performanslı bir Uzaktan Yordam Çağrısı (RPC) çerçevesidir.

gRPC’nin başlıca avantajları şunlardır:

  • Modern, yüksek performanslı, hafif RPC çerçevesi.
  • Varsayılan olarak Protokol Arabellekleri kullanan, dilden bağımsız uygulamalara olanak veren Sözleşme öncelikli API geliştirme.
  • Kesin tür belirtilmiş sunucular ve istemciler oluşturmak için çok sayıda dilde kullanılabilen araçlar.
  • İstemci, sunucu ve iki yönlü akış çağrılarına yönelik destek.
  • Protobuf ikili serileştirme ile azaltılmış ağ kullanımı.

Bu avantajlar, gRPC'nin aşağıdakiler için ideal olmasını sağlar:

  • Verimliliğin kritik olduğu basit mikro hizmetler.
  • Geliştirme için birden çok dilin gerekli olduğu çok teknolojili sistemler.
  • Akış isteklerini veya yanıtlarını işlemesi gereken noktadan noktaya gerçek zamanlı hizmetler.

.proto dosyaları için C# Araç desteği

gRPC, API geliştirme için sözleşme öncelikli bir yaklaşım kullanır. Hizmetler ve iletiler .proto dosyalarında tanımlanır:

syntax = "proto3";

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply);
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

Hizmetler, istemciler ve iletiler için .NET türleri, .proto dosyaları projeye eklenerek otomatik olarak oluşturulur:

  • Grpc.Tools paketine paket başvurusu ekleme.
  • <Protobuf> öğe grubuna .proto dosyası ekleme.
<ItemGroup>
  <Protobuf Include="Protos\greet.proto" />
</ItemGroup>

gRPC araç desteği hakkında daha fazla bilgi için, bkz. C# ile gRPC hizmetleri.

ASP.NET Core’da gRPC hizmetleri

gRPC hizmetleri ASP.NET Core üzerinde barındırılabilir. Hizmetler, günlüğe kaydetme, bağımlılık ekleme (DI), kimlik doğrulaması ve yetkilendirme gibi ASP.NET Core özellikleriyle tam tümleştirmeye sahiptir.

ASP.NET Core uygulamasına gRPC hizmeti ekleme

gRPC, Grpc.AspNetCore paketini gerektirir. Bir .NET uygulamasında gRPC yapılandırma hakkında bilgi için, bkz. gRPC yapılandırma.

gRPC hizmeti proje şablonu

ASP.NET Core gRPC Hizmeti proje şablonu bir başlangıç hizmeti sağlar:

public class GreeterService : Greeter.GreeterBase
{
    private readonly ILogger<GreeterService> _logger;

    public GreeterService(ILogger<GreeterService> logger)
    {
        _logger = logger;
    }

    public override Task<HelloReply> SayHello(HelloRequest request,
        ServerCallContext context)
    {
        _logger.LogInformation("Saying hello to {Name}", request.Name);
        return Task.FromResult(new HelloReply 
        {
            Message = "Hello " + request.Name
        });
    }
}

GreeterService, .proto dosyasındaki Greeter hizmetinden oluşturulan GreeterBase türünden devralır. Hizmet, Program.cs içindeki istemciler tarafından erişilebilir hale getirilir:

app.MapGrpcService<GreeterService>();

ASP.NET Core'da gRPC hizmetleri hakkında daha fazla bilgi edinmek için, bkz. ASP.NET Core ile gRPC hizmetleri.

Bir .NET istemcisiyle gRPC hizmetlerini çağırma

gRPC istemcileri, .proto dosyalarından oluşturulan somut istemci türleridir. Somut gRPC istemcisi, .proto dosyasındaki gRPC hizmetine çevrilen yöntemlere sahiptir.

var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);

var response = await client.SayHelloAsync(
    new HelloRequest { Name = "World" });

Console.WriteLine(response.Message);

gRPC istemcisi, gRPC hizmetine uzun süreli bir bağlantıyı temsil eden bir kanal kullanılarak oluşturulur. GrpcChannel.ForAddress kullanılarak bir kanal oluşturulabilir.

İstemci oluşturma ve farklı hizmet yöntemlerini çağırma hakkında daha fazla bilgi için, bkz. .NET istemcisiyle gRPC hizmetlerini çağırma.

Ek kaynaklar

gRPC dilden bağımsız, yüksek performanslı bir Uzaktan Yordam Çağrısı (RPC) çerçevesidir.

gRPC’nin başlıca avantajları şunlardır:

  • Modern, yüksek performanslı, hafif RPC çerçevesi.
  • Varsayılan olarak Protokol Arabellekleri kullanan, dilden bağımsız uygulamalara olanak veren Sözleşme öncelikli API geliştirme.
  • Kesin tür belirtilmiş sunucular ve istemciler oluşturmak için çok sayıda dilde kullanılabilen araçlar.
  • İstemci, sunucu ve iki yönlü akış çağrılarına yönelik destek.
  • Protobuf ikili serileştirme ile azaltılmış ağ kullanımı.

Bu avantajlar, gRPC'nin aşağıdakiler için ideal olmasını sağlar:

  • Verimliliğin kritik olduğu basit mikro hizmetler.
  • Geliştirme için birden çok dilin gerekli olduğu çok teknolojili sistemler.
  • Akış isteklerini veya yanıtlarını işlemesi gereken noktadan noktaya gerçek zamanlı hizmetler.

.proto dosyaları için C# Araç desteği

gRPC, API geliştirme için sözleşme öncelikli bir yaklaşım kullanır. Hizmetler ve iletiler .proto dosyalarında tanımlanır:

syntax = "proto3";

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply);
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

Hizmetler, istemciler ve iletiler için .NET türleri, .proto dosyaları projeye eklenerek otomatik olarak oluşturulur:

  • Grpc.Tools paketine paket başvurusu ekleme.
  • <Protobuf> öğe grubuna .proto dosyası ekleme.
<ItemGroup>
  <Protobuf Include="Protos\greet.proto" />
</ItemGroup>

gRPC araç desteği hakkında daha fazla bilgi için, bkz. C# ile gRPC hizmetleri.

ASP.NET Core’da gRPC hizmetleri

gRPC hizmetleri ASP.NET Core üzerinde barındırılabilir. Hizmetler, günlüğe kaydetme, bağımlılık ekleme (DI), kimlik doğrulaması ve yetkilendirme gibi ASP.NET Core özellikleriyle tam tümleştirmeye sahiptir.

ASP.NET Core uygulamasına gRPC hizmeti ekleme

gRPC, Grpc.AspNetCore paketini gerektirir. Bir .NET uygulamasında gRPC yapılandırma hakkında bilgi için, bkz. gRPC yapılandırma.

gRPC hizmeti proje şablonu

gRPC hizmeti proje şablonu, bir başlangıç hizmeti sağlar:

public class GreeterService : Greeter.GreeterBase
{
    private readonly ILogger<GreeterService> _logger;

    public GreeterService(ILogger<GreeterService> logger)
    {
        _logger = logger;
    }

    public override Task<HelloReply> SayHello(HelloRequest request,
        ServerCallContext context)
    {
        _logger.LogInformation("Saying hello to {Name}", request.Name);
        return Task.FromResult(new HelloReply 
        {
            Message = "Hello " + request.Name
        });
    }
}

GreeterService, .proto dosyasındaki Greeter hizmetinden oluşturulan GreeterBase türünden devralır. Hizmet, Startup.cs içindeki istemciler tarafından erişilebilir hale getirilir:

app.UseEndpoints(endpoints =>
{
    endpoints.MapGrpcService<GreeterService>();
});

ASP.NET Core'da gRPC hizmetleri hakkında daha fazla bilgi edinmek için, bkz. ASP.NET Core ile gRPC hizmetleri.

Bir .NET istemcisiyle gRPC hizmetlerini çağırma

gRPC istemcileri, .proto dosyalarından oluşturulan somut istemci türleridir. Somut gRPC istemcisi, .proto dosyasındaki gRPC hizmetine çevrilen yöntemlere sahiptir.

var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);

var response = await client.SayHelloAsync(
    new HelloRequest { Name = "World" });

Console.WriteLine(response.Message);

gRPC istemcisi, gRPC hizmetine uzun süreli bir bağlantıyı temsil eden bir kanal kullanılarak oluşturulur. GrpcChannel.ForAddress kullanılarak bir kanal oluşturulabilir.

İstemci oluşturma ve farklı hizmet yöntemlerini çağırma hakkında daha fazla bilgi için, bkz. .NET istemcisiyle gRPC hizmetlerini çağırma.

Ek kaynaklar