Přehled gRPC v .NET

Autor: James Newton-King

gRPC je výkonná architektura využívající vzdálené volání procedur (RPC) nezávislá na programovacím jazyku.

Mezi výhody gRPC patří:

  • Moderní, výkonná a jednoduchá architektura RPC
  • Vývoj rozhraní API začínající kontraktem, který standardně využívá vyrovnávací paměti protokolů, čímž umožňuje implementace nezávislé na jazycích
  • Nástroje dostupné pro řadu jazyků, se kterými lze generovat servery a klienty silného typu
  • Podpora volání klienta, serveru a obousměrného streamování
  • Menší využití sítě díky binární serializaci Protobuf

Díky těmto výhodám je gRPC ideální pro:

  • Jednoduché mikroslužby, u kterých je důležitá efektivita
  • Polyglotní systémy, při jejichž vývoji se vyžaduje více jazyků
  • Služby typu point-to-point fungující v reálném čase, které musí zpracovávat požadavky nebo odpovědi streamování

Podpora nástrojů jazyka C# pro soubory .proto

V gRPC se při vývoji rozhraní API používá přístup založený na kontraktech. Služby a zprávy se definují v souborech .proto:

syntax = "proto3";

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

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

Typy .NET pro služby, klienty a zprávy se generují automaticky vložením souborů .proto do projektu:

  • Přidejte odkaz na balíček Grpc.Tools.
  • Přidejte soubory .proto do skupiny položek <Protobuf>.
<ItemGroup>
  <Protobuf Include="Protos\greet.proto" />
</ItemGroup>

Další informace o podpoře nástrojů gRPC najdete v tématu Služby gRPC v jazyce C#.

Služby gRPC v ASP.NET Core

Služby gRPC je možné hostovat v ASP.NET Core. Služby jsou plně integrované s funkcemi ASP.NET Core, jako jsou protokolování, injektáž závislostí, ověřování nebo autorizace.

Přidání služeb gRPC do aplikace ASP.NET Core

Pro gRPC se vyžaduje balíček Grpc.AspNetCore. Informace o konfiguraci gRPC v aplikaci .NET najdete v části Konfigurace gRPC.

Šablona projektu služby gRPC

Šablona projektu služby ASP.NET Core gRPC nabízí základní službu:

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
        });
    }
}

Třída GreeterService dědí typ z třídy GreeterBase, která se generuje ze služby Greeter v souboru .proto. Služba je přístupná klientům v souboru Program.cs:

app.MapGrpcService<GreeterService>();

Další informace o službách gRPC v ASP.NET Core najdete v tématu Služby gRPC v ASP.NET Core.

Volání služeb gRPC pomocí klienta .NET

Klienti gRPC jsou konkrétní typy klientů, kteří se generují ze souborů .proto. Konkrétní klient gRPC obsahuje metody, které se překládají na službu gRPC v souboru .proto.

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);

Klient gRPC se vytváří pomocí kanálu, který představuje dlouhodobé připojení ke službě gRPC. Kanál je možné vytvořit pomocí metody GrpcChannel.ForAddress.

Další informace o vytváření klientů a volání různých metod služeb najdete v tématu Volání služeb gRPC pomocí klienta .NET.

Další prostředky

gRPC je výkonná architektura využívající vzdálené volání procedur (RPC) nezávislá na programovacím jazyku.

Mezi výhody gRPC patří:

  • Moderní, výkonná a jednoduchá architektura RPC
  • Vývoj rozhraní API začínající kontraktem, který standardně využívá vyrovnávací paměti protokolů, čímž umožňuje implementace nezávislé na jazycích
  • Nástroje dostupné pro řadu jazyků, se kterými lze generovat servery a klienty silného typu
  • Podpora volání klienta, serveru a obousměrného streamování
  • Menší využití sítě díky binární serializaci Protobuf

Díky těmto výhodám je gRPC ideální pro:

  • Jednoduché mikroslužby, u kterých je důležitá efektivita
  • Polyglotní systémy, při jejichž vývoji se vyžaduje více jazyků
  • Služby typu point-to-point fungující v reálném čase, které musí zpracovávat požadavky nebo odpovědi streamování

Podpora nástrojů jazyka C# pro soubory .proto

V gRPC se při vývoji rozhraní API používá přístup založený na kontraktech. Služby a zprávy se definují v souborech .proto:

syntax = "proto3";

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

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

Typy .NET pro služby, klienty a zprávy se generují automaticky vložením souborů .proto do projektu:

  • Přidejte odkaz na balíček Grpc.Tools.
  • Přidejte soubory .proto do skupiny položek <Protobuf>.
<ItemGroup>
  <Protobuf Include="Protos\greet.proto" />
</ItemGroup>

Další informace o podpoře nástrojů gRPC najdete v tématu Služby gRPC v jazyce C#.

Služby gRPC v ASP.NET Core

Služby gRPC je možné hostovat v ASP.NET Core. Služby jsou plně integrované s funkcemi ASP.NET Core, jako jsou protokolování, injektáž závislostí, ověřování nebo autorizace.

Přidání služeb gRPC do aplikace ASP.NET Core

Pro gRPC se vyžaduje balíček Grpc.AspNetCore. Informace o konfiguraci gRPC v aplikaci .NET najdete v části Konfigurace gRPC.

Šablona projektu služby gRPC

Šablona projektu služby gRPC nabízí základní službu:

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
        });
    }
}

Třída GreeterService dědí typ z třídy GreeterBase, která se generuje ze služby Greeter v souboru .proto. Služba je přístupná klientům v souboru Startup.cs:

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

Další informace o službách gRPC v ASP.NET Core najdete v tématu Služby gRPC v ASP.NET Core.

Volání služeb gRPC pomocí klienta .NET

Klienti gRPC jsou konkrétní typy klientů, kteří se generují ze souborů .proto. Konkrétní klient gRPC obsahuje metody, které se překládají na službu gRPC v souboru .proto.

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);

Klient gRPC se vytváří pomocí kanálu, který představuje dlouhodobé připojení ke službě gRPC. Kanál je možné vytvořit pomocí metody GrpcChannel.ForAddress.

Další informace o vytváření klientů a volání různých metod služeb najdete v tématu Volání služeb gRPC pomocí klienta .NET.

Další prostředky