استفاده از Hangfire در ABP.io
به طور خلاصه Hangfire یک کتابخانه برای نمایش و مدیریت فعالیت های پشتی (BackgroundJon, BackgroundWorker) هست، فریم ورک Abp (به نظر من) بهترین فریم ورک .net موجود هست که با قراردادن بهترین کتابخانه ها و بهترین تجربیات Best Practice کمک می کنه تا تیم توسعه درگیر موضوعات زیرساختی نشوند و روی بیزینس اصلی نرم افزار تمرکز کنند. (در آینده در مورد این فریم ورک بیشتر خواهم گفت)
بنا به مستندات Abp شما می توانید به راحتی ترد (Thread) های پشتی را راه ایجاد کنید، امکان یکپارچه سازی این ترد ها با Hangfire هم به راحتی وجود دارد. نکته اصلی این هست که در حال حاضر مستندات ارائه شده مشکل دارد و نیاز به بازبینی دارد، البته در یک درخواست پشتیبانی به مشکل و راه حل اون اشاره شده که احتمالا به زودی این مشکل هم برطرف می شود. این درخواست از پشتیبانی مبنای این مطلب بنده هم شده.
بریم سراغ اصل موضوع:
بنا به مستندات برای یکپارچه سازی با Hangfire نیاز دارید ماژول AbpBackgroundWorkersHangfireModule به یکی از ماژول های خود اضافه کنید (در مورد سیستم فوق العاده ماژولاریتی Abp خودتان مطالعه کنید)
تنظیمات Hangfire
بعد از اون به سراغ تنظیمات Hangfire می رویم، همان طور که اطلاع دارید Hangfire برای ذخیره اطلاعات مورد نیازش به یک پایگاه داده (JobStorage) دارد، این پایگاه داده می تواند Sql Server یا Redis باشد. در حال حاضر استفاده از Redis جز پلن پولی هست. تنظیمات در ماژول به صورت زیر خواهد بود (متد ConfigureHangfire را خودم اضافه کردم):
- در خط 78 اطلاعات اتصال به دیتابیس را تعیین می کنیم، در اینجا مشخص کردیم که اگر برای Hangfire در appsettings.json کانکشن استرینگ تنظیم نشده بود، از کانکشن استریگ پیش فرض استفاده کن.
- در خط 85 تنظیمات مربوط به SqlServerStorage را آماده می کنیم، در مورد تنظیمات می توانید به مستندات مراجعه کنید. نکته خط 92 هست که مشخص می کنیم اگر لازم هست جداول مورد نیاز را بسازد.
- در خط 96 کانشکشن استرینگ و تنظیمات را برای Hangfire ست می کنیم.
تنظیمات Dashbord
برای اینکه بتوانید داشبورد Hangfire را مشاهده کنید، نیاز هست middleware مربوط به آن را اضافه کنید:
بعد از اجرای برنامه داشبود در آدرس /hangfire در دسترس هست
ساخت BackgroundWorker
بر طبق مستندات یک کلاس Worker مشتق شده از HangfireBackgroundWorkerBase ساخته می شود.
- در خط 21 ایتریشن (چرخه اجرا) را مشخص می کنیم، در ایجا می توانید از cron syntax استفاده کنید.
- در خط 24 یک تابع DoWorkAsync وجود دارد که فعالیت اصلی در آن تعریف می شود.
در نهایت نیاز هست که این کلاس رو به لیست برنامه های پشتی اضافه کنیم:
در صورتی که سوال یا ابهامی در این مورد دارید با من تماس بگیرید، اطلاعات تماس در صفحه تماس هست