Xây dựng các ứng dụng .NET 10 có khả năng phục hồi với Polly

0 0 0

Người đăng: Kansu Leg

Theo Viblo Asia

Trong các hệ thống phân tán và dịch vụ vi mô hiện đại, lỗi là điều không thể tránh khỏi. Việc xây dựng các ứng dụng phục hồi có thể xử lý lỗi một cách khéo léo và phục hồi nhanh chóng là rất quan trọng. Trong .NET 10, Polly cung cấp một cách mạnh mẽ để triển khai các mẫu phục hồi như Retry, Circuit Breaker, Timeout và Fallback.

🚧 Tại sao khả năng phục hồi lại quan trọng

  • Mạng không ổn định
  • Hết thời gian chờ từ API bên ngoài
  • Tạm thời không có dịch vụ
  • Dịch vụ hạ lưu chậm

Nếu không có chiến lược phục hồi, ứng dụng của bạn có thể bị sập hoặc xuống cấp nghiêm trọng trong những điều kiện như vậy.

🛠 Giới thiệu về Polly

Polly là thư viện phục hồi và xử lý lỗi tạm thời .NET cho phép các nhà phát triển thể hiện các chính sách như:

  • Thử lại
  • Cầu dao điện
  • Hết giờ
  • Dự phòng
  • Vách ngăn cách ly

Nó hoạt động liền mạch với HttpClientFactory và các tính năng mới trong .NET 10.

🔁 Chính sách thử lại

Thử lại một thao tác không thành công một số lần nhất định trước khi đưa ra ngoại lệ.

var retryPolicy = Policy .Handle<HttpRequestException>() .RetryAsync(3);

⚡ Chính sách ngắt mạch

Ngăn hệ thống của bạn khỏi bị quá tải bởi các dịch vụ bị lỗi. Mở mạch sau một số lần lỗi.

var circuitBreakerPolicy = Policy .Handle<HttpRequestException>() .CircuitBreakerAsync( handledEventsAllowedBeforeBreaking: 5, durationOfBreak: TimeSpan.FromSeconds(30));

⏳ Chính sách thời gian chờ

Hủy các yêu cầu mất nhiều thời gian hơn thời gian chỉ định.

var timeoutPolicy = Policy .TimeoutAsync<HttpResponseMessage>(5); // seconds

🧰 Chính sách dự phòng

Cung cấp giá trị mặc định hoặc logic thay thế khi yêu cầu không thành công.

var fallbackPolicy = Policy<HttpResponseMessage> .Handle<Exception>() .FallbackAsync(new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent("Fallback response") });

🧪 Kết hợp các chính sách

Bạn có thể nối nhiều chính sách để kiểm soát chặt chẽ hơn.

var policyWrap = Policy.WrapAsync(retryPolicy, circuitBreakerPolicy, timeoutPolicy);

🌐 Sử dụng Polly với HttpClientFactory trong .NET 10

builder.Services.AddHttpClient("ResilientClient") .AddPolicyHandler(policyWrap);

📌 Thực hành tốt nhất

  • Sử dụng ghi nhật ký chính sách để quan sát
  • Tránh thử lại các lỗi không tạm thời
  • Điều chỉnh ngưỡng dựa trên hành vi của hệ thống của bạn
  • Kết hợp các chính sách một cách khôn ngoan để tránh sự phức tạp quá mức

✅ Kết luận

Khả năng phục hồi không phải là một thứ xa xỉ — mà là một điều cần thiết trong các ứng dụng phân tán. Với Polly .NET 10, bạn có thể xây dựng các ứng dụng mạnh mẽ, phản hồi nhanh và đáng tin cậy ngay cả khi gặp lỗi. Bắt đầu từ quy mô nhỏ, thử nghiệm thường xuyên và điều chỉnh dần dần để tạo ra các hệ thống thực sự phục hồi.

Bình luận