爲了更好地控制系統負載,我需要在後臺連續運行排隊作業(或並行運行n個線程)。微軟任務的連續後臺處理
作業將使用表作爲隊列在SQL Server 2008數據庫中排隊。
我需要一個簡單的「引擎」,它將從隊列中取出元素並執行一些處理代碼。處理代碼將是C#/ .net。
我主要關注的是簡單性,可測試性,簡單部署和可靠性。
我在尋找有關該技術的建議,如Biztalk或者Windows服務?
爲了更好地控制系統負載,我需要在後臺連續運行排隊作業(或並行運行n個線程)。微軟任務的連續後臺處理
作業將使用表作爲隊列在SQL Server 2008數據庫中排隊。
我需要一個簡單的「引擎」,它將從隊列中取出元素並執行一些處理代碼。處理代碼將是C#/ .net。
我主要關注的是簡單性,可測試性,簡單部署和可靠性。
我在尋找有關該技術的建議,如Biztalk或者Windows服務?
這裏有一些選項適合你,但Writing a windows service是我會選的。檢查鏈接了。它給出了一個基本的例子,可以幫助你開始。
另一種選擇是使用SQL Server Agent作爲調度程序在需要時觸發C#可執行文件。然而,這不是一個好的選擇,因爲它對我來說更像是一種黑客攻擊。
我們在談論什麼樣的工作?如果作業本身由數據庫工作組成,那麼最好的選擇是在SQL Server中利用internal Activation。內部激活也可以啓動C#/ .Net代碼。一個例子見Asynchronous procedure execution。使用激活是最可靠的方法。計劃的作業可以在鏡像和羣集故障切換之後生存。事實上,它非常可靠,即使在服務器崩潰之後,計劃作業也會激活並運行,並在新主機上從數據庫備份重建服務器。但是,如果工作需要做'外部'工作,就不應該使用這種方法。連接到Web服務。對於這些服務,您可以使用External Activator,並利用SQL Server激活機制固有的可靠性和自我平衡規模,但最終仍然是Windows Service和Service Broker隊列。
如果您發現內置SQL隊列的開銷很高,我建議您通過Using tables as Queues並嘗試堅持基本操作。不要在隊列表中添加花哨的窺視或掃描,否則系統會陷入死鎖狀態,這是將表用作隊列的常見問題。
你是什麼意思?你已經說過你要使用SQL和C#。那麼你在問怎麼寫這段代碼?你有沒有嘗試過任何東西,它不工作? – spinon 2011-01-05 22:00:07
對不起。我正在尋找的是關於「引擎」部分技術的想法。我沒有及時瞭解所有新技術。我覺得我需要比控制檯應用「更好」的東西,因爲它需要從服務器開始並始終保持運行。 – squareeyes 2011-01-05 22:13:36