2017-09-04 83 views
2

我正在使用Asp.net MVC 5和web api和SQL Server進行一個項目。我應該實現需要調度的功能。在Asp.net Mvc和web api中調度

我在這個系統中的一些用戶,每個用戶可以註冊一個訂單,我保存在數據庫中的訂單信息。

問題:對於在2分鐘後在系統中註冊的每個訂單,我應該發送一條消息給他的主人並通知他他的訂單狀態。

我應該如何檢查已登記的2分鐘後,每個訂單的狀態?

我應該安排已登記的每個訂單任務? (這可能是每秒超過500秩序,所以我不認爲這是一個很好的解決方案)

我想一個解決方案,具有良好的性能處理這個問題。這裏

+3

https://www.hangfire.io/ –

+1

或[ quartz.net](https://www.quartz-scheduler.net/) –

+0

@ S.Akbari @ Peter Bons我知道這些組件,但是我應該爲每個已註冊的訂單安排一項任務嗎? –

回答

1

你最好的解決辦法是Hangfire

遲髮型是專爲這些樣的挑戰。這與你有多少工作無關。在配置完Hangfire之後,您可以簡單地將方法傳遞給隊列。您也可以推遲執行與時間跨度

BackgroundJob.Schedule(
() => Console.WriteLine("Delayed!"), 
TimeSpan.FromMinutes(2)); 

你甚至可以鏈的工作,非常方便,如果你有你的訂單處理多個步驟:

BackgroundJob.Schedule(() => { 

    SomeProcessToComplete(); 

},TimeSpan.FromMinutes(2)); 

static void SomeProcessToComplete(){ 

    //after code runs add another job to the queue 
    BackgroundJob.Schedule(
    () => Console.WriteLine("Delayed!"), 
    TimeSpan.FromMinutes(2)); 
} 
+0

我的應用程序不是一個控制檯應用程序,它運行在IIS上的一個web應用程序,它可能會停止應用程序,因爲很長時間沒有任何請求來到應用程序 –

+0

多數民衆贊成什麼它:)。它會保持活力。我已經使用了它多年,並且從未錯過任務 –

+0

但是,您可以執行的操作是在IIS服務器的應用程序池高級設置中將IdleTimeout設置爲0 –

0

另一個解決辦法是,每次訂單保存將其寫入服務器上的文本文件,同時添加手錶通知您文本文件已更改,這將觸發您的服務發送消息