Omówienie usługi gRPC na platformie .NET

Autor: James Newton-King

gRPC to niezależna od języka, wysoce wydajna struktura zdalnego wywołania procedury (RPC, Remote Procedure Call).

Główne zalety struktury gRPC są następujące:

  • Nowoczesna, wysoce wydajna i uproszczona struktura RPC.
  • Tworzenie interfejsu API za pomocą podejścia „najpierw kontrakt” z domyślnym użyciem buforów protokołu, co umożliwia implementacje niezależne od języka.
  • Dostępne dla wielu języków narzędzia do generowania silnie typizowanych serwerów i klientów.
  • Obsługa wywołania przesyłania strumieniowego klienta, serwera i dwukierunkowego.
  • Zredukowane użycie sieci dzięki serializacji binarnej Protobuf.

Te korzyści sprawiają, że gRPC idealnie nadaje się do następujących zastosowań:

  • Lekkie mikrousługi, w przypadku których wydajność ma kluczowe znaczenie.
  • Systemy wielojęzyczne, w których do programowania jest wymaganych wiele języków.
  • Usługi czasu rzeczywistego typu punkt-punkt, które muszą obsługiwać żądania lub odpowiedzi przesyłania strumieniowego.

Obsługa narzędzi języka C# dla plików .proto

Usługa gRPC korzysta z podejścia opartego na kontraktach do tworzenia interfejsów API. Usługi i komunikaty są definiowane w plikach .proto:

syntax = "proto3";

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

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

Typy platformy .NET dla usług, klientów i komunikatów są generowane automatycznie przez dołączenie plików .proto w projekcie:

  • Dodaj odwołanie do pakietu Grpc.Tools.
  • Dodaj pliki .proto do grupy elementów <Protobuf>.
<ItemGroup>
  <Protobuf Include="Protos\greet.proto" />
</ItemGroup>

Aby uzyskać więcej informacji na temat obsługi narzędzi usługi gRPC, zobacz Usługi gRPC z językiem C#.

Usługi gRPC na platformie ASP.NET Core

Usługi gRPC mogą być hostowane na platformie ASP.NET Core. Usługi mają pełną integrację z funkcjami platformy ASP.NET Core, takimi jak rejestrowanie, wstrzykiwanie zależności, uwierzytelnianie i autoryzacja.

Dodawanie usługi gRPC do aplikacji ASP.NET Core

Usługa gRPC wymaga pakietu Grpc.AspNetCore. Aby uzyskać informacje na temat konfigurowania usługi gRPC w aplikacji .NET, zobacz Konfigurowanie usługi gRPC.

Szablon projektu usługi gRPC

Szablon projektu usługi gRPC platformy ASP.NET Core udostępnia usługę startową:

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

Usługa GreeterService dziedziczy po typie GreeterBase, który jest generowany z usługi Greeter w pliku .proto. Usługa jest dostępna dla klientów w pliku Program.cs:

app.MapGrpcService<GreeterService>();

Aby dowiedzieć się więcej o usługach gRPC na platformie ASP.NET Core, zobacz Usługi gRPC z platformą ASP.NET Core.

Wywoływanie usług gRPC przy użyciu klienta .NET

Klienci gRPC to konkretne typy klientów generowane na podstawie plików .proto. Konkretny klient gRPC ma metody, które przekładają się na usługę gRPC w pliku .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 jest tworzony przy użyciu kanału, który reprezentuje długotrwałe połączenie z usługą gRPC. Kanał można utworzyć przy użyciu GrpcChannel.ForAddress.

Aby uzyskać więcej informacji na temat tworzenia klientów i wywoływania różnych metod usług, zobacz Wywoływanie usług gRPC za pomocą klienta platformy .NET.

Dodatkowe zasoby

gRPC to niezależna od języka, wysoce wydajna struktura zdalnego wywołania procedury (RPC, Remote Procedure Call).

Główne zalety struktury gRPC są następujące:

  • Nowoczesna, wysoce wydajna i uproszczona struktura RPC.
  • Tworzenie interfejsu API za pomocą podejścia „najpierw kontrakt” z domyślnym użyciem buforów protokołu, co umożliwia implementacje niezależne od języka.
  • Dostępne dla wielu języków narzędzia do generowania silnie typizowanych serwerów i klientów.
  • Obsługa wywołania przesyłania strumieniowego klienta, serwera i dwukierunkowego.
  • Zredukowane użycie sieci dzięki serializacji binarnej Protobuf.

Te korzyści sprawiają, że gRPC idealnie nadaje się do następujących zastosowań:

  • Lekkie mikrousługi, w przypadku których wydajność ma kluczowe znaczenie.
  • Systemy wielojęzyczne, w których do programowania jest wymaganych wiele języków.
  • Usługi czasu rzeczywistego typu punkt-punkt, które muszą obsługiwać żądania lub odpowiedzi przesyłania strumieniowego.

Obsługa narzędzi języka C# dla plików .proto

Usługa gRPC korzysta z podejścia opartego na kontraktach do tworzenia interfejsów API. Usługi i komunikaty są definiowane w plikach .proto:

syntax = "proto3";

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

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

Typy platformy .NET dla usług, klientów i komunikatów są generowane automatycznie przez dołączenie plików .proto w projekcie:

  • Dodaj odwołanie do pakietu Grpc.Tools.
  • Dodaj pliki .proto do grupy elementów <Protobuf>.
<ItemGroup>
  <Protobuf Include="Protos\greet.proto" />
</ItemGroup>

Aby uzyskać więcej informacji na temat obsługi narzędzi usługi gRPC, zobacz Usługi gRPC z językiem C#.

Usługi gRPC na platformie ASP.NET Core

Usługi gRPC mogą być hostowane na platformie ASP.NET Core. Usługi mają pełną integrację z funkcjami platformy ASP.NET Core, takimi jak rejestrowanie, wstrzykiwanie zależności, uwierzytelnianie i autoryzacja.

Dodawanie usługi gRPC do aplikacji ASP.NET Core

Usługa gRPC wymaga pakietu Grpc.AspNetCore. Aby uzyskać informacje na temat konfigurowania usługi gRPC w aplikacji .NET, zobacz Konfigurowanie usługi gRPC.

Szablon projektu usługi gRPC

Szablon projektu usługi gRPC udostępnia usługę startową:

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

Usługa GreeterService dziedziczy po typie GreeterBase, który jest generowany z usługi Greeter w pliku .proto. Usługa jest dostępna dla klientów w pliku Startup.cs:

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

Aby dowiedzieć się więcej o usługach gRPC na platformie ASP.NET Core, zobacz Usługi gRPC z platformą ASP.NET Core.

Wywoływanie usług gRPC przy użyciu klienta .NET

Klienci gRPC to konkretne typy klientów generowane na podstawie plików .proto. Konkretny klient gRPC ma metody, które przekładają się na usługę gRPC w pliku .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 jest tworzony przy użyciu kanału, który reprezentuje długotrwałe połączenie z usługą gRPC. Kanał można utworzyć przy użyciu GrpcChannel.ForAddress.

Aby uzyskać więcej informacji na temat tworzenia klientów i wywoływania różnych metod usług, zobacz Wywoływanie usług gRPC za pomocą klienta platformy .NET.

Dodatkowe zasoby