ASP.NET Core: Tổng quan về gRPC trên .NET
gRPC là một framework Gọi thủ tục từ xa (Remote Procedure Call - RPC) hiệu suất cao, không phụ thuộc vào ngôn ngữ.
Những lợi ích chính của gRPC là:
- Framework RPC hiện đại, hiệu suất cao, nhẹ.
- Phát triển API theo hợp đồng đầu tiên, sử dụng Bộ đệm giao thức theo mặc định, cho phép triển khai bất khả tri về ngôn ngữ.
- Công cụ có sẵn cho nhiều ngôn ngữ để tạo ra các máy chủ và máy khách có kiểu mạnh.
- Hỗ trợ máy khách, máy chủ và các lời gọi truyền phát hai chiều.
- Giảm mức sử dụng mạng với tuần tự hóa nhị phân Protobuf.
Những lợi ích này khiến gRPC trở nên lý tưởng cho:
- Các dịch vụ vi mô nhẹ cần hiệu quả cao.
- Hệ thống đa ngôn ngữ yêu cầu nhiều ngôn ngữ để phát triển.
- Các dịch vụ thời gian thực điểm-điểm cần xử lý các yêu cầu hoặc phản hồi truyền trực tuyến.
Hỗ trợ công cụ C# cho các file .proto
gRPC sử dụng cách tiếp cận ưu tiên hợp đồng để phát triển API. Dịch vụ và tin nhắn được định nghĩa trong file .proto
:
syntax = "proto3"; service Greeter { rpc SayHello (HelloRequest) returns (HelloReply); } message HelloRequest { string name = 1; } message HelloReply { string message = 1; }
Các loại .NET cho dịch vụ, ứng dụng khách và tin nhắn được tạo tự động bằng cách đưa các file .proto
vào dự án:
- Thêm tham chiếu gói vào gói Grpc.Tools.
- Thêm file
.proto
vào nhóm mục<Protobuf>
.
<ItemGroup> <Protobuf Include="Protos\greet.proto" /> </ItemGroup>
Để biết thêm thông tin về hỗ trợ công cụ gRPC, hãy xem các dịch vụ gRPC với C#.
Dịch vụ gRPC trên ASP.NET Core
Các dịch vụ gRPC có thể được lưu trữ trên ASP.NET Core. Các dịch vụ được tích hợp đầy đủ với các tính năng của ASP.NET Core như ghi nhật ký, dependency injection (DI), xác thực và ủy quyền.
Thêm dịch vụ gRPC vào ứng dụng ASP.NET Core
gRPC yêu cầu gói Grpc.AspNetCore. Để biết thông tin về cách định cấu hình gRPC trong ứng dụng .NET, hãy xem Định cấu hình gRPC.
Mẫu dự án dịch vụ gRPC
Mẫu dự án ASP.NET Core gRPC Service cung cấp dịch vụ khởi đầu:
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
kế thừa từ kiểu GreeterBase
được tạo từ dịch vụ Greeter
trong file .proto
. Dịch vụ này được cung cấp cho khách tại Program.cs
:
app.MapGrpcService<GreeterService>();
Để tìm hiểu thêm về các dịch vụ gRPC trên ASP.NET Core, hãy xem các dịch vụ gRPC với ASP.NET Core.
Gọi các dịch vụ gRPC bằng máy khách .NET
Máy khách gRPC là các loại máy khách cụ thể được tạo từ các file .proto
. Máy khách gRPC cụ thể có các phương thức chuyển sang dịch vụ gRPC trong file .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);
Máy khách gRPC được tạo bằng cách sử dụng kênh, kênh này thể hiện kết nối lâu dài với dịch vụ gRPC. Một kênh có thể được tạo bằng cách sử dụng GrpcChannel.ForAddress
.
Để biết thêm thông tin về cách tạo ứng dụng khách và gọi các phương thức dịch vụ khác nhau, hãy xem Gọi dịch vụ gRPC bằng ứng dụng khách .NET.
Tài nguyên bổ sung
- Dịch vụ gRPC với C#
- Dịch vụ gRPC với ASP.NET Core
- Gọi các dịch vụ gRPC bằng máy khách .NET
- Tích hợp factory máy khách gRPC trong .NET
- Tạo máy khách và máy chủ .NET Core gRPC trong ASP.NET Core