A .NET-en található gRPC áttekintése

Note

Ez nem a cikk legújabb verziója. Az aktuális kiadásról a cikk .NET 10-es verziójában olvashat.

Warning

A ASP.NET Core ezen verziója már nem támogatott. További információt a .NET és a .NET Core támogatási szabályzatában talál. Az aktuális kiadásról a cikk .NET 10-es verziójában olvashat.

Írta: James Newton-King

gRPC egy nyelvi agnosztikus, nagy teljesítményű távoli eljáráshívási (RPC) keretrendszer.

A gRPC fő előnyei a következők:

  • Modern, nagy teljesítményű, könnyű RPC-keretrendszer.
  • A protokollpuffereket alapértelmezés szerint használó szerződés-első API-fejlesztés, amely lehetővé teszi a nyelvi agnosztikus implementációkat.
  • Számos nyelvhez elérhető eszköz, amely erősen gépelt kiszolgálókat és klienseket hoz létre.
  • Támogatja az ügyfél-, kiszolgáló- és kétirányú streamelési hívásokat.
  • Csökkentett hálózati használat a Protobuf bináris szerializálásával.

Ezek az előnyök ideálissá teszik a gRPC-t a következőkhöz:

  • Egyszerűsített mikroszolgáltatások, ahol a hatékonyság kritikus fontosságú.
  • Többnyelvű rendszerek, amelyek fejlesztéséhez több nyelvre van szükség.
  • Pont–pont valós idejű szolgáltatások, amelyeknek streamelési kéréseket vagy válaszokat kell kezelnie.

C#-eszközök támogatása .proto-fájlokhoz

A gRPC egy szerződés-első megközelítést használ az API-fejlesztéshez. A szolgáltatások és üzenetek a .proto fájlokban vannak definiálva:

syntax = "proto3";

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

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

.NET szolgáltatások, ügyfelek és üzenetek típusai automatikusan létrejönnek .proto fájlok projektbe való belefoglalásával:

  • Adjon hozzá egy csomaghivatkozást a Grpc.Tools csomaghoz .
  • .proto-fájlokat adhat hozzá az <Protobuf> elemcsoporthoz.
<ItemGroup>
  <Protobuf Include="Protos\greet.proto" />
</ItemGroup>

A gRPC eszköztámogatásával kapcsolatos további információkért tekintse meg a GRPC-szolgáltatásokat a C#-tal.

gRPC-szolgáltatások a ASP.NET Core-on

A gRPC-szolgáltatások a ASP.NET Core-on üzemeltethetők. A szolgáltatások teljes mértékben integrálódnak ASP.NET alapvető funkciókkal, például a naplózással, a függőséginjektálással (DI), a hitelesítéssel és az engedélyezéssel.

GRPC-szolgáltatások hozzáadása egy ASP.NET Core-alkalmazáshoz

A gRPC használatához a Grpc.AspNetCore csomag szükséges. A gRPC .NET-alkalmazásokban való konfigurálásáról további információt a gRPC konfigurálása című témakörben talál.

A gRPC szolgáltatás projektsablonja

A ASP.NET Core gRPC-szolgáltatás projektsablonja egy kezdőszolgáltatást biztosít:

public class GreeterService(ILogger<GreeterService> logger) : Greeter.GreeterBase
{
    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
        });
    }
}
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 a GreeterBase típusból öröklődik, amely a .proto fájlban található Greeter szolgáltatásból lett generálva. A szolgáltatás elérhetővé válik az ügyfelek számára a Program.cs fájlban:

app.MapGrpcService<GreeterService>();

Ha többet szeretne megtudni, nézze meg a következő forrást: gRPC-szolgáltatások az ASP.NET Core-ral.

gRPC szolgáltatáshívások .NET ügyféllel

A gRPC-ügyfelek konkrét ügyféltípusok, amelyek .proto fájlokból jönnek létre. A konkrét gRPC-ügyfél a .proto fájlban található gRPC szolgáltatásra lefordított metódusokat tartalmazza.

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

A gRPC-ügyfél egy csatornával jön létre, amely hosszú élettartamú kapcsolatot jelöl egy gRPC-szolgáltatással. A csatorna a következő használatával GrpcChannel.ForAddresshozható létre: .

Az ügyfelek létrehozásával és a különböző szolgáltatási módszerek meghívásával kapcsolatos további információkért lásd: GRPC-szolgáltatások hívása a .NET-ügyféllel.

gRPC egy nyelvi agnosztikus, nagy teljesítményű távoli eljáráshívási (RPC) keretrendszer.

A gRPC fő előnyei a következők:

  • Modern, nagy teljesítményű, könnyű RPC-keretrendszer.
  • Szerződés-első API-fejlesztés, amely alapértelmezés szerint protokollpuffereket használ, lehetővé téve a nyelvi agnosztikus implementációkat.
  • Számos nyelvhez rendelkezésre állnak eszközkészletek, amelyek erősen típusozott kiszolgálókat és klienseket generálnak.
  • Támogatja az ügyfél-, kiszolgáló- és kétirányú streamelési hívásokat.
  • Csökkentett hálózati használat a Protobuf bináris szerializálásával.

Ezek az előnyök ideálissá teszik a gRPC-t a következőkhöz:

  • Egyszerűsített mikroszolgáltatások, ahol a hatékonyság kritikus fontosságú.
  • Többnyelvű rendszerek, amelyek fejlesztéséhez több nyelvre van szükség.
  • Pont–pont valós idejű szolgáltatások, amelyeknek streamelési kéréseket vagy válaszokat kell kezelnie.

C#-eszközök támogatása fájlokhoz .proto

A gRPC egy szerződés-első megközelítést használ az API-fejlesztéshez. A szolgáltatások és üzenetek a fájlokban .proto vannak definiálva:

syntax = "proto3";

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

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

A .NET-típusok a szolgáltatásokhoz, ügyfelekhez és üzenetekhez automatikusan generálódnak azáltal, hogy .proto fájlokat tartalmaznak egy projektben.

  • Adjon hozzá egy csomaghivatkozást a Grpc.Tools csomaghoz .
  • Adj hozzá .proto fájlokat az <Protobuf> elemcsoporthoz.
<ItemGroup>
  <Protobuf Include="Protos\greet.proto" />
</ItemGroup>

A gRPC-eszközök támogatásáról további információt a GRPC Services with C# című cikkben talál.

gRPC-szolgáltatások a ASP.NET Core-on

A gRPC-szolgáltatások a ASP.NET Core-on üzemeltethetők. A szolgáltatások teljes mértékben integrálódnak ASP.NET alapvető funkciókkal, például a naplózással, a függőséginjektálással (DI), a hitelesítéssel és az engedélyezéssel.

GRPC-szolgáltatások hozzáadása egy ASP.NET Core-alkalmazáshoz

A gRPC használatához a Grpc.AspNetCore csomag szükséges. A gRPC .NET-alkalmazásokban való konfigurálásáról további információt a gRPC konfigurálása című témakörben talál.

A gRPC szolgáltatás projektsablonja

A gRPC szolgáltatás projektsablonja egy kezdőszolgáltatást biztosít:

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 a GreeterBase típusból öröklődik, amely a Greeter fájlban lévő .proto szolgáltatásból lett generálva. A szolgáltatás a következő helyen érhető el az ügyfelek számára Startup.cs:

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

A ASP.NET Core gRPC-szolgáltatásaival kapcsolatos további információkért tekintse meg a gRPC-szolgáltatásokat ASP.NET Core-nal.

GRPC-szolgáltatások meghívása .NET-ügyféllel

A gRPC-ügyfelek konkrét kliens típusok, amelyek generálódnak .proto fájlokból. A konkrét gRPC-ügyfél olyan metódusokat tartalmaz, amelyek a .proto fájlban lévő gRPC szolgáltatásra fordítják le.

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

A gRPC-ügyfél egy csatornával jön létre, amely egy gRPC szolgáltatás hosszú élettartamú kapcsolatát jelöli. A csatorna a következővel GrpcChannel.ForAddresshozható létre: .

Az ügyfelek létrehozásával és a különböző szolgáltatási módszerek meghívásával kapcsolatos további információkért lásd: GRPC-szolgáltatások hívása a .NET-ügyféllel.