簡體   English   中英

在Quartz.Net中計划Web服務-Windows Service或Singleton

[英]scheduling web services in Quartz.Net - windows service or singleton

我有一個Web應用程序,該應用程序在后端運行大量數據處理作業,因此我不想停滯服務器,而是想安排作業並決定讓Quartz.Net來運行。

我想要做的顯而易見的事情是將調度程序創建為Windows服務。 我正在運行類似的東西,但是由於某些原因,發現Windows服務有些痛苦(其中之一是當崩潰時需要手動重新啟動)。

我當時想,一種更優雅的方法是將服務創建為單例,我的問題是:

  • 如果我有幾個ashx后端調用,可以這樣聲明嗎:

     public static IScheduler Scheduler { get; private set; } 

在每個ashx中,所有后端調用都將是一個單例嗎?

  • 我可以檢查正在運行的作業scheduler.GetCurrentlyExecutingJobs(); 並關閉調度程序(如果沒有)?

  • 我想使用Quartz.Net的主要原因是為了限制同時運行的作業數量,因此基本上我只創建了現在運行的簡單作業。 因此,從我閱讀的內容來看,如果沒有可用線程,則一旦線程再次可用,將拒絕作業,然后將其處理。 scheduler.GetCurrentlyExecutingJobs();是否 還返回所有被拒絕/等待的工作?

    • 如果發生故障,如何啟動調度程序? 可能是因為IIS關閉了它,或者因為如果沒有作業在運行,我的代碼也將其關閉了。 理想情況下,如果添加新作業,則調度程序將啟動。 我猜想,我可以在陣列中維護自己的作業列表並像這樣進行管理-還是可以直接通過Quartz進行操作? 還是最好像這樣使調度程序永久化-IIS應用程序池回收+石英調度

由於您有多個問題,為了清楚起見,我將其復制到此處:

  1. 如果我有幾個ashx后端調用,可以這樣聲明嗎?

如果您為ashx定義了多個類,則每個類將獲得調度程序的新實例。 因此,不,僅在每個屬性上聲明一個私有靜態屬性不會給您一個單例。 如果在global.asax文件中聲明了一個公共靜態屬性,那么可以,您將擁有一個單例。

  1. 我可以檢查正在運行的作業Scheduler.GetCurrentlyExecutingJobs(); 並關閉調度程序(如果沒有)?

是。 或者,您可以調用shutdown方法並使用重載,該重載允許您指定是否等待所有作業完成

  1. scheduler.GetCurrentlyExecutingJobs();是否 還返回所有被拒絕/等待的工作?

不,只是當前正在執行的。 您可以通過雖然調用get從調度計划作業的列表GetJobKeys ,然后也許還稱GetJobDetail如果需要的話。

  1. 如果發生故障,如何啟動調度程序?

您可以調用Start來啟動調度程序,但是如果已經調用Shutdown,則不能調用它,因此,必須創建一個新的調度程序實例,然后再啟動它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM