فکر کنید سیستم نرم افزاری شما به گونه ای است که از شرکت های مختلف سرویس میگیرید (یعنی پایداری سیستم شما به پایداری شرکت های دیگه وابسته است).
به عنوان مثال در نرم افزار شما ابتدا سرویس 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 رو اینجوری گذاشتم که اگر در 30 ثانیه 10 تا ناموفق بود جریان رو قطع کن و وضعیت به صورت بسته یا قطع در میاد.
در policy دیگر تعیین می شود که هر دو دفعه تلاش یک زمانی رو صبر کن در این حالت جریان نیمه باز است.
این کار برای این است که بررسی می کند آیا سرویس صدا زده شده برقرار شده است یا نه و بعد از اطمینان ، وضعیت به حالت باز بر میگردد.
نحوه استفاده از IHttpClientFactory
پیاده سازی الگوی Circuit Breaker مایکروسافت
نمونه: sample