Mohsen Kasraeifar
Mohsen Kasraeifar
خواندن ۲ دقیقه·۴ سال پیش

پیاده سازی الگوی Circuit Breaker با IHttpClientFactory و Polly

  • مشکل:

فکر کنید سیستم نرم افزاری شما به گونه ای است که از شرکت های مختلف سرویس میگیرید (یعنی پایداری سیستم شما به پایداری شرکت های دیگه وابسته است).

به عنوان مثال در نرم افزار شما ابتدا سرویس A صدا زده میشه و بعد سرویس B و اگر سرویس B خطا خورد باید سرویس C صدا زده شود. در این صورت اگر سرویس B از دسترس خارج شده باشد خوب باعث میشه که سرویس C ترافیک زیادی رو بگیره و اگر یک بخش دیگر از سیستم شما با سرویس C کار کند به مشکل بخورد.

  • راه حل آسان:

یک الگوی معروف به نام Circuit Breaker وجود دارد که زبان سادش اینه که جریان رو بررسی کن اگر مشکلی داشت قطع کن ): .

شرکت های بزگی مثل Netflix هم از این الگو استفاده میکنن.

و نکته بسیار خوب این است که مایکروسافت این الگو رو با توجه به کتابخانه Polly با IHttpclientFactory (یکی از اصولی ترین روش های Api Call) ترکیب کرده و به راحتی با چند تنظیم ساده در startup قابلیت حل این مشکل رو داده.

  • پیاده سازی:

ابتدا پکیج های زیر رو اضافه کنید:

Polly

Polly.Extensions.Http

Microsoft.Extensions.Http.Polly

بعد در Startup.cs، در قسمتی که می خواهید تنظیمات httpclient رو انجام بدین میتوانید نوع جریان رو هم تنظیم کنید.

توی تصویر مشخصه که با policy که گذاشتیم، تنظیمات مورد نظر رو انجام میدهیم.
توی تصویر مشخصه که با policy که گذاشتیم، تنظیمات مورد نظر رو انجام میدهیم.

در این الگو سه تا وضعیت داریم، یا جریان قطع است و یا باز است و یا نیمه باز است.

به عنوان مثال توی تنظیم قطع جریان policy رو اینجوری گذاشتم که اگر در 30 ثانیه 10 تا ناموفق بود جریان رو قطع کن و وضعیت به صورت بسته یا قطع در میاد.

در policy دیگر تعیین می شود که هر دو دفعه تلاش یک زمانی رو صبر کن در این حالت جریان نیمه باز است.

این کار برای این است که بررسی می کند آیا سرویس صدا زده شده برقرار شده است یا نه و بعد از اطمینان ، وضعیت به حالت باز بر میگردد.


نحوه استفاده از IHttpClientFactory

پیاده سازی الگوی Circuit Breaker مایکروسافت

نمونه: sample

pollyIHttpClientFactorycircuit breakerالگوی قطع کننده مدارmohsen kasraeifar
Software Engineer
شاید از این پست‌ها خوشتان بیاید