خانه > MVC > استفاده از Quartz.Net برای زمانبندی وظایف در وب سایت ها

استفاده از Quartz.Net برای زمانبندی وظایف در وب سایت ها

Using Quart.net for job sheduler same as cron job

می دانید که وب سایت ها فاقد ابزار زمانبندی برای اجرای تسک ها یا وظایف می باشند. مثلا فرض کنید که می خواهید یک وظیفه تعریف شده مانند ارسال ایمیل یا اس ام اس در یک بازه زمانی یا در زمانهای خاص را انجام دهید. برای این کار چه باید کرد؟

۱- استفاده از task scheduler  ویندوز و برقرای ارتباط آن با وب سایت.

این روش یک ایراد دارد و آن اینست که اگر وب شما روی یک سرور هاستینگ باشد شما اجازه و یا دسترسی تعریف یک task scheduler را روی سرور نخواهید داشت.

۲- کد نویسی شخصی.

این روش نیز بسیار پیچیده است و در صورتی که کد نویسی درست انجام نشده باشد احتمال هدر دادن ریسورها از جمله ram و cpu بسیار بالاست

۳- استفاده از محصولات تولیدی

ما برای آموزش استفاده از محصولات تولیدی را توضیح می دهیم

یکی از محصولات تولیدی در این زمینه Quartz.net می باشد. در واقع quartz یک پروژه برای جاوا می باشد که برای دات نت نیز پیاده سازی شده است و شما از طریق Nuget و از داخل VS به آن دسترسی دارید. متاسفانه وب سایت Quartz.Net تقریبا ( تا این لحظه ای که این مطلب نوشته می شود) فاقد یک مثال عملی و روشن برای VS می باشد، بر همین اساس ممکن است که کسانی که تازه وارد این مقوله شده اند براحتی نتوانند با این ابزار ارتباط برقرار کنند.

مزید بر مشکل فوق بسیاری از رفرنس هائی که در جاهای مختلف اینترنت به آن میشود با آخرین ورژن آن ناسازگاری داشته و حتی تکه کدهائی که در سایت ها وجود دارد ممکن است برای شما مشکل آفرین باشد.

برای همین در زیر بطور خیلی ساده و روشن نحوه استفاده از آن بیان می شود. امید است مورد استفاده قرار گیرد.

۱- داخل پروژه خود و داخل VS از طریق ناگت  Quartz.Net را سرچ کرده و نصب کنید.

۲- در Solution Explorer زیر شاخ عنوان پروژه خود یک دایرکتوری به نام Jobs ایجاد کنید ( اختیاری است)

۳- یک فایل از نوع کلاس را داخل آن ایجاد کنید مثلا SendSMS

4- کدهائی مشابه زیر را در آن واردکنید.

خوب این کلاسی است که Quartz.net آنرا فراخوانی خواهد کرد، و شما می توانید داخل آن بدلخواه کدهای خودتان را بنویسید. مثلا به دیتابیس وصل شده و بر اساس دسترسی به جداول مثلا اس ام اس یا ایمیل بفرستید.

توجه داشته باشید که شما این کلاس را براحتی داخل پروژه MVC می توانید استفاده کنید. اینکه آیا می توان یک Action را نیز فراخوانی کرد هنوز تست نکرده ام. یعنی ارث بری یک کلاس کنترلر از جفت Controller و IJob

5- فایل Global.asax را باز کرده و کدهای زیر را در آن وارد کنید. این همان جائی است که دقیقا تازه وارد ها نمی دانند که باید از همینجا شروع کنند

همین.

ما یکی از پیچیده ترین زمانبندی ها را با استفاده از همین تکنولوژی راه اندازی کردیم.

موفق باشید

 

 

 

 

 

 

 

Categories: MVC Tags:
  1. xboy
    ۱۳ دی ۱۳۹۲ در ۲۱:۱۴ | #1

    سلام جناب فعال خواه،با عرض سلام و خداقوت یه زحمت براتون دارم:
    میشه پروژه کامل (مقاله فوق) همراه با بانک اطلاعاتی رو برای دانلود بذارید؟اگه لطف کنید و کتابخانه PHDILIB.dll رو هم بذارید ممنون میشم. آخه هرچی گشتم نتونستم پیدا کنم.
    اگر با ایمیل هم خبر بدید که دیگه دربست مخلص شمائیم.

    با تشکر

    • ۱۴ دی ۱۳۹۲ در ۰۸:۴۵ | #2

      سلام
      ًQuartz.net حسب نیاز پارامتر های زیادی می تواند بگیرد و یا به روش های زیادی می تواند پیاده سازی شود. اما آنچه در این تاپیک آمده در واقع صفر تا صد کار با آن هست. پروژه ای هم که ما پیاده سازی کردیم یک پروژه واقعی هست که متاسفانه سورس آن و یا بانک اطلاعاتی آن را اجازه نداریم که منتشر کنیم. در عین حال تاپیک فوق مدخلی برای ورود به Quartz.net می باشد. ضمن اینکه برای استفاده از Quartz.net نیاز به دیتابیس نیست. با این وجود اگر موردی باشد حتما بفرمائید کا با هم بررسی کنیم.

      در خصوص PHDILib.dll هم براتون می فرستم. البته این dll ممکن هست که در آینده توسعه پیدا کند که بدیهی است در همین سایت منعکس خواهد شد.

      موفق باشید

  2. محمد صادق
    ۳۱ تیر ۱۳۹۴ در ۰۳:۰۱ | #3

    با سلام خدمت شما
    من با ویژوال استودیو این پروژه رو نوشتم و به زعم خودم در قسمت انجام job ارسال ایمیل رو گذاشتم و در وب کانفیگ هم تنظیم کردم که ایمیل ها رو بجای ارسال از طریق اینترنت ، بصورت یک فایل اوت لوک توی یکی از فلدر هام بریزه.
    تا اینجا درست و اوکی
    حالا یه مشکل و یه سوال
    - وقتی پروژه رو توی ویژوال استودیو استاپ میکنم ، همچنان ارسال ایمیل ها داره انجام میشه.چطوری متوقفش کنم؟ یه ترفند الکی اینه که با ویرایش پروژه متوقف میشه .اما تحت نت چی؟
    سوال
    چطور میتونم این زمان رو داینامیک از دیتابیسم برای هم کار جدا بنویسم؟ الان در این پروژه که شما نوشتین ، هر جابی که باشه در بازه یک دقیقه ای انجام میشه.من میخوام در دیتابیسم برای یک سابجکت ایمیل بزارم هم روز و برای یک هر ثانیه.چطور میتونم این رو اعمال کنم؟
    تشکر و قدردانی من رو بپذیرین

    • ۳۱ تیر ۱۳۹۴ در ۰۶:۲۰ | #4

      با سلام
      به نظرم برای متوقف کردن سه تا کار می تونید انجام بدید
      ۱- استفاده از دستور scheduler.shutdown(true)
      2- استفاده از دستور مشابه روبرو scheduler.unscheduleJob(triggerKey(“trigger1″, “group1″));
      3- متوقف کردن application pool در IIS

      در مورد خوندن از دیتابیس هم به نظرم اگه بتونید داخل Application_Start() و ConfigureQuartzJobs(); از Global.asax.cs کدهاتون را قرار بدید می تونید به منظورتون می رسید هر چند به نظرم سخته. راستش یکبار من داشتم امتحان می کردم ببینم می شه یا نه و البته الان یادم نیست که موفقیت آمیز بود یا نه. چون البته بهش نیاز نداشتم و فقط می خواستم انجام شدنش را مطئمن بشم.

      امیدوارم تونسته باشم کمکی کرده باشم

  3. ۵ دی ۱۳۹۵ در ۰۸:۵۲ | #5

    ممنون برای مطلب خوبتون

  1. بدون بازتاب
برای فرستادن دیدگاه بایدوارد شوید.
IP Blocking Protection is enabled by IP Address Blocker from LionScripts.com.