ASP.NET Core: gRPC cho cấu hình .NET


Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên

Trong bài viết này

  1. Định cấu hình tùy chọn dịch vụ
  2. Định cấu hình tùy chọn máy khách
  3. Tài nguyên bổ sung

Định cấu hình tùy chọn dịch vụ

Các dịch vụ gRPC được định cấu hình AddGrpc bằng Startup.cs. hoặc Program.cs. Tùy chọn cấu hình có trong gói Grpc.AspNetCore.Server.

Bảng sau mô tả các tùy chọn để định cấu hình dịch vụ gRPC:

Lựa chọn Giá trị mặc định Mô tả
MaxSendMessageSize null Kích thước tin nhắn (message) tối đa tính bằng byte có thể được gửi từ máy chủ. Cố gắng gửi tin nhắn vượt quá kích thước tối đa được cấu hình sẽ dẫn đến một ngoại lệ. Khi được đặt thành null, kích thước tin nhắn là không giới hạn.
MaxReceiveMessageSize 4MB Kích thước tin nhắn tối đa tính bằng byte mà máy chủ có thể nhận được. Nếu máy chủ nhận được tin nhắn vượt quá giới hạn này, nó sẽ đưa ra một ngoại lệ. Việc tăng giá trị này cho phép máy chủ nhận được các tin nhắn lớn hơn nhưng có thể tác động tiêu cực đến mức tiêu thụ bộ nhớ. Khi được đặt thành null, kích thước tin nhắn là không giới hạn.
EnableDetailedErrors false Nếu được đặt thành true, các tin nhắn ngoại lệ chi tiết sẽ được trả về cho máy khách khi một ngoại lệ được đưa vào một phương thức dịch vụ. Mặc định là false. Cài đặt EnableDetailedErrors thành true có thể rò rỉ thông tin nhạy cảm.
CompressionProviders gzip Tập hợp các nhà cung cấp tính năng nén được sử dụng để nén và giải nén tin nhắn. Các nhà cung cấp nén tùy chỉnh có thể được tạo và thêm vào collection. Các nhà cung cấp được cấu hình mặc định hỗ trợ nén gzip.
ResponseCompressionAlgorithm null Thuật toán nén được sử dụng để nén các tin nhắn được gửi từ máy chủ. Thuật toán phải khớp với nhà cung cấp dịch vụ nén trong CompressionProviders. Để thuật toán nén phản hồi, máy khách phải cho biết nó hỗ trợ thuật toán bằng cách gửi nó trong header grpc-accept-encoding.
ResponseCompressionLevel null Mức nén được sử dụng để nén các tin nhắn được gửi từ máy chủ.
Interceptors None Một tập hợp các thiết bị chặn được chạy với mỗi lệnh gọi gRPC. Các thiết bị chặn được chạy theo thứ tự chúng được đăng ký. Các thiết bị chặn được định cấu hình chung được chạy trước các thiết bị chặn được định cấu hình cho một dịch vụ.

Theo mặc định, thiết bị chặn có thời gian tồn tại theo yêu cầu. Hàm tạo chặn được gọi và các tham số được giải quyết từ chèn phụ thuộc (DI). Một loại thiết bị chặn cũng có thể được đăng ký với DI để ghi đè cách tạo và thời gian tồn tại của nó.

Bộ chặn cung cấp các chức năng tương tự so với middleware ASP.NET Core. Để biết thêm thông tin, hãy xem Trình chặn gRPC so với Middleware.
IgnoreUnknownServices false Nếu true, các lời gọi đến các dịch vụ và phương thức không xác định không trả về trạng thái KHÔNG HOÀN TOÀN và yêu cầu sẽ chuyển sang middleware đã đăng ký tiếp theo trong ASP.NET Core.

Các tùy chọn có thể được cấu hình cho tất cả các dịch vụ bằng cách cung cấp một delegate tùy chọn cho lời gọi AddGrpc trong Startup.ConfigureServices:

public void ConfigureServices(IServiceCollection services)
{
    services.AddGrpc(options =>
    {
        options.EnableDetailedErrors = true;
        options.MaxReceiveMessageSize = 2 * 1024 * 1024; // 2 MB
        options.MaxSendMessageSize = 5 * 1024 * 1024; // 5 MB
    });
}

Các tùy chọn cho một dịch vụ sẽ ghi đè các tùy chọn chung được cung cấp trong AddGrpc và có thể được định cấu hình bằng cách sử dụng AddServiceOptions<TService>:

public void ConfigureServices(IServiceCollection services)
{
    services.AddGrpc().AddServiceOptions<MyService>(options =>
    {
        options.MaxReceiveMessageSize = 2 * 1024 * 1024; // 2 MB
        options.MaxSendMessageSize = 5 * 1024 * 1024; // 5 MB
    });
}

Theo mặc định, các bộ chặn dịch vụ có thời gian tồn tại theo yêu cầu. Việc đăng ký loại thiết bị chặn với DI sẽ ghi đè cách tạo thiết bị chặn và thời gian tồn tại của nó.

public void ConfigureServices(IServiceCollection services)
{
    services.AddGrpc(options =>
    {
        options.Interceptors.Add<LoggingInterceptor>();
    });
    services.AddSingleton<LoggingInterceptor>();
}

Tùy chọn máy chủ ASP.NET Core

Grpc.AspNetCore.Server được lưu trữ bởi một máy chủ web ASP.NET Core. Có một số tùy chọn cho máy chủ ASP.NET Core, bao gồm Kestrel, IIS và HTTP.sys. Mỗi máy chủ cung cấp các tùy chọn bổ sung về cách phân phát các yêu cầu HTTP.

Máy chủ được ứng dụng ASP.NET Core sử dụng được định cấu hình trong mã khởi động ứng dụng. Máy chủ mặc định là Kestrel.

Để biết thêm thông tin về các máy chủ khác nhau và các tùy chọn cấu hình của chúng, hãy xem:

Định cấu hình tùy chọn máy khách

Cấu hình máy khách gRPC được đặt trên GrpcChannelOptions. Tùy chọn cấu hình có trong gói Grpc.Net.Client.

Bảng sau mô tả các tùy chọn để định cấu hình kênh gRPC:

Lựa chọn Giá trị mặc định Mô tả
HttpHandler Phiên bản mới Được HttpMessageHandler sử dụng để thực hiện lời gọi gRPC. Máy khách có thể được đặt để định cấu hình tùy chỉnh HttpClientHandler hoặc thêm trình xử lý bổ sung vào quy trình HTTP cho các lệnh gọi gRPC. Nếu không có HttpMessageHandler nào được chỉ định, thì một phiên bản mới HttpClientHandler sẽ được tạo cho kênh với tính năng xử lý tự động.
HttpClient null Được HttpClient sử dụng để thực hiện lời gọi gRPC. Cài đặt này là một thay thế cho HttpHandler.
DisposeHttpClient false Nếu được đặt thành true và HttpMessageHandleror HttpClient được chỉ định, thì HttpHandler hoặc HttpClient tương ứng sẽ được loại bỏ khi GrpcChannel được loại bỏ.
LoggerFactory null LoggerFactory được máy khách sử dụng để ghi nhật ký thông tin về các lời gọi gRPC. Một thể hiện LoggerFactory có thể được giải quyết từ việc chèn phụ thuộc hoặc được tạo bằng cách sử dụng LoggerFactory.Create. Để biết ví dụ về cách định cấu hình ghi nhật ký, hãy xem Ghi nhật ký và chẩn đoán trong gRPC trên .NET.
MaxSendMessageSize null Kích thước tin nhắn tối đa tính bằng byte có thể được gửi từ máy khách. Cố gắng gửi tin nhắn vượt quá kích thước thư tối đa được cấu hình sẽ dẫn đến một ngoại lệ. Khi được đặt thành null, kích thước tin nhắn là không giới hạn.
MaxReceiveMessageSize 4MB Kích thước tin nhắn tối đa tính bằng byte mà máy khách có thể nhận được. Nếu máy khách nhận được một tin nhắn vượt quá giới hạn này, nó sẽ đưa ra một ngoại lệ. Việc tăng giá trị này cho phép máy khách nhận được tin nhắn lớn hơn nhưng có thể tác động tiêu cực đến mức tiêu thụ bộ nhớ. Khi được đặt thành null, kích thước tin nhắn là không giới hạn.
Credentials null Một thể hiện ChannelCredentials. Thông tin xác thực được sử dụng để thêm siêu dữ liệu xác thực vào lệnh gọi gRPC.
CompressionProviders gzip Tập hợp các nhà cung cấp tính năng nén được sử dụng để nén và giải nén tin nhắn. Các nhà cung cấp nén tùy chỉnh có thể được tạo và thêm vào collection. Các nhà cung cấp được cấu hình mặc định hỗ trợ nén gzip.
ThrowOperationCanceledOnCancellation false Nếu được đặt thành true, máy khách sẽ ném ra ngoại lệ OperationCanceledException khi cuộc gọi bị hủy hoặc vượt quá thời hạn.
UnsafeUseInsecureChannelCallCredentials false Nếu được đặt thành trueCallCredentials sẽ được áp dụng cho các lệnh gọi gRPC được thực hiện bởi kênh không an toàn. Việc gửi header xác thực qua kết nối không an toàn có liên quan đến bảo mật và không nên thực hiện trong môi trường production.
MaxRetryAttempts 5 Số lần thử lại tối đa. Giá trị này giới hạn mọi giá trị thử lại và thử bảo hiểm rủi ro được chỉ định trong cấu hình dịch vụ. Chỉ đặt giá trị này sẽ không cho phép thử lại. Việc thử lại được bật trong cấu hình dịch vụ, việc này có thể được thực hiện bằng cách sử dụng ServiceConfig. Một giá trị null sẽ loại bỏ giới hạn số lần thử lại tối đa. Để biết thêm thông tin về các lần thử lại, hãy xem Xử lý lỗi tạm thời với các lần thử lại gRPC.
MaxRetryBufferSize 16MB Kích thước bộ đệm tối đa tính bằng byte có thể được sử dụng để lưu trữ tin nhắn đã gửi khi thử lại hoặc phòng ngừa lời gọi. Nếu vượt quá giới hạn bộ đệm thì sẽ không có lần thử lại nào được thực hiện nữa và tất cả lệnh gọi phòng ngừa trừ một lệnh sẽ bị hủy. Giới hạn này được áp dụng cho tất cả các lời gọi được thực hiện bằng kênh này. Giá trị null sẽ loại bỏ giới hạn kích thước bộ đệm thử lại tối đa.
MaxRetryBufferPerCallSize 1MB Kích thước bộ đệm tối đa tính bằng byte có thể được sử dụng để lưu trữ tin nhắn đã gửi khi thử lại hoặc phòng ngừa lời gọi. Nếu vượt quá giới hạn bộ đệm thì sẽ không có lần thử lại nào được thực hiện nữa và tất cả lệnh gọi phòng ngừa trừ một lệnh sẽ bị hủy. Giới hạn này được áp dụng cho một lời gọi. Giá trị null sẽ loại bỏ giới hạn kích thước bộ đệm thử lại tối đa cho mỗi lời gọi.
ServiceConfig null Cấu hình dịch vụ cho kênh gRPC. Cấu hình dịch vụ có thể được sử dụng để định cấu hình thử lại gRPC.

Đoạn code sau sau đây sẽ:

  • Đặt kích thước tin nhắn gửi và nhận tối đa trên kênh.
  • Tạo một máy khách.
static async Task Main(string[] args)
{
    var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions
    {
        MaxReceiveMessageSize = 5 * 1024 * 1024, // 5 MB
        MaxSendMessageSize = 2 * 1024 * 1024 // 2 MB
    });
    var client = new Greeter.GreeterClient(channel);

    var reply = await client.SayHelloAsync(
                      new HelloRequest { Name = "GreeterClient" });
    Console.WriteLine("Greeting: " + reply.Message);
}

Lưu ý rằng các thiết bị chặn máy khách không được định cấu hình bằng GrpcChannelOptions. Thay vào đó, các thiết bị chặn máy khách được định cấu hình bằng  phương thức mở rộng Intercept với một kênh. Phương thức mở rộng này nằm trong namespace Grpc.Core.Interceptors.

static async Task Main(string[] args)
{
    var channel = GrpcChannel.ForAddress("https://localhost:5001");
    var callInvoker = channel.Intercept(new LoggingInterceptor());
    var client = new Greeter.GreeterClient(callInvoker);

    var reply = await client.SayHelloAsync(
                      new HelloRequest { Name = "GreeterClient" });
    Console.WriteLine("Greeting: " + reply.Message);
}

Tùy chọn xử lý System.Net

Grpc.Net.Client sử dụng phương thức vận chuyển HTTP dẫn xuất từ HttpMessageHandler để thực hiện các yêu cầu HTTP. Mỗi trình xử lý cung cấp các tùy chọn bổ sung về cách thực hiện các yêu cầu HTTP.

Trình xử lý được định cấu hình trên một kênh và có thể bị ghi đè bằng cách cài đặt GrpcChannelOptions.HttpHandler. .NET Core 3 và .NET 5 trở lên sử dụng SocketsHttpHandler theo mặc định. Các ứng dụng khách gRPC trên .NET Framework nên định cấu hình WinHttpHandler.

Để biết thêm thông tin về các trình xử lý khác nhau và các tùy chọn cấu hình của chúng, hãy xem:

Tài nguyên bổ sung

Nguồn: learn.microsoft.com
» Tiếp: Xác thực và ủy quyền trong gRPC cho ASP.NET Core
« Trước: Tài liệu chuyển mã JSON gRPC với Swagger/OpenAPI
Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên
Copied !!!