2017-01-23 84 views
0

我想構建一個工作調度程序。 所以此作業調度程序允許用戶配置:在C#中構建一個工作調度程序#

  1. 作業開始時間。 (datetime值)
  2. 工作頻率:分鐘,小時,天,月,年(任何整數值)

我對如何建立這個調度2種選擇:

  1. 使用C#Timer類。但這也意味着我必須爲每個計劃作業創建一個新的Timer對象。我打算公開API端點以供用戶調用並POST開始時間和頻率信息。所以當端點被調用時,我需要創建一個新的Timer對象。 這將甚至規模?我如何管理Timer對象?我需要允許用戶創建,更新和刪除他們的工作。

  2. 使用Azure調度程序。但是,我有一個非常大的用戶數據庫。我看了看定價,可以在1個實例上運行的最大總工作量僅爲500萬個工作。另外,如果我有超過1個實例在運行,我很難管理正在運行的實例。我如何決定調度多個調度器實例?

+1

您可以用一些數學,處理多個預定作業有一個計時器... –

+0

是的,但它不適用於我的情況下,因爲用戶可以輸入工作頻率的任意整數。我仍然會爲不同的頻率創建不同的定時器。我有一個很大的用戶數據庫,不同的用戶會想要以不同的方式配置他們的工作 – Nyamnyam

+0

如果您想自己創建它,只需運行一個計時器,並確認剩下多少時間用於下一次計劃作業迭代,並且每次都進行更新。 E.g如果你運行你的計時器每一秒(可能是過於頻繁)和命中,需要從現在開始,加入一分鐘,保存它作爲下一次執行時間和每個時鐘滴答,你會檢查,如果這個時候已經過去了的工作。否則,有很好的庫可以做到這一點,請參閱下面的答案。 –

回答

0

你可以使用Azure的輔助角色,每個作業類型的一個輔助角色,以及不同的計劃爲每個作業,用戶可以創建自己獨立的時間表爲每個作業,從預定義的「作業類型」列表選擇。

+0

不能採用這種方法,因爲用戶可以配置不同的重複值。它會太貴 – Nyamnyam

0

爲此,您可以使用RabbitMQ。基本上,每個調度程序都只是標準使用者的生產者 - 消費者概念。我建議你爲這個任務使用一些信使,因爲即使你的系統被關閉,他們也可以保證你的任務被執行。它是自我平衡,穩定和幾乎所有你需要在這裏實現的。

這裏更多:https://www.rabbitmq.com/tutorials/tutorial-one-dotnet.html

對於你的任務,你只需指定製片方,如果其運行將任務排隊到RabbitMQ的一些日程安排不關心他們如何使者執行。通過這種方式,您可以添加,刪除,編輯生產者中的日程表。另外,有點建議,而不是頻率條款使用cron-expressions。它是廣泛支持,易於理解的概念,用於指定人類可讀的時間表。

這裏更多:https://crontab.guru/

0

有,你可以使用現有的庫,例如QuartzHangfire。第一個使用成功的庫很簡單,後者有一個用戶界面以及運行任務等,您可以使用它。

我確定有很多其他的圖書館,如果這些不夠好。

1

德里克這裏從Azure的Scheduler.We有使用計劃類似於你所描述的,這取決於你的用戶/工作檔案資料是什麼樣子的場景企業客戶,它應該很容易想出一個好辦法,它們劃分爲不同的工作集合。

你期望有多少個工作?聽起來你需要的遠超過我們在P20計劃的單一工作集合中支持的500萬人。我想更好地瞭解您的場景,並幫助您決定Azure Scheduler是否是正確的解決方案。

您可以在Derek.Li(上)微軟點com我聯繫。