1

如果數以千計的定時事件發生數百次,最佳做法是什麼?針對大規模系統的ASP.Net調度計時事件

我有一個C#ASP.Net基於Web的應用程序,此應用程序位於Microsoft Exchange和另一個基於Web的服務之間。交換每小時檢查一次用於用戶約會,這些約會然後需要被轉發到另一個基於web的服務,但不是立即。他們應該根據預約的距離進行轉發,所以在預約開始前15分鐘。我正在考慮爲此使用計劃任務,但我不確定系統如何能夠滿足大量用戶的需求?

Exchange的檢查並不是一個真正的問題,但是根據從Exchange中獲取的數據觸發另一個事件會更棘手。我看了Quartz.Net,也許這可能有一些幫助。我很好奇哪些其他設計解決方案的人們可以考慮和/或目前的設計問題。當然,一個理想的世界是一個Exchange插件將是首選的解決方案,但目前它不是一個真正的選擇。

感謝收聽!

回答

0

也許更好的解決方案是將事件存儲在暫存區域中,並且每分鐘查詢該表並將相關事件推送給用戶。這意味着你每分鐘只查詢一次,但如何推回給用戶,我不確定。

這遠遠沒有經過充分考慮的選項,但可能足以讓您以不同的方向思考。

1

應用程序可能不應該是一個Web應用程序 - 理想情況下應該是一個Windows服務,但我明白它不一定那麼簡單,因此您需要確保所做的所有代碼都是自包含的並最低限度依賴於託管應用程序。

我認爲就發送數據而言,我可能會這樣做: 1)獲取交換處理以確定每個項目的轉發發生的時間 - 因此您的表格中有一個列「send at 「和另一個」發送「。 2)然後您每分鐘運行一個過程,說明發送所有未發送的應該由現在發送的過程。輕微的皺紋是如果它超出你需要立即再次運行它 - 如果它一直超出你有容量問題。

要點在於它非常非常簡單 - 你有一個交換過程,執行一個明確定義的任務,並且你有一個沒有做任何特別複雜任務的高頻任務,它是一個簡單的查詢(從表發送= false,併發送<值) - 可能到臨時表中,以便您可以在完成發送後運行單個查詢更新 - 您可以優化索引。你不是想排隊一大堆事件觸發器,而是每分鐘觸發一次,並處理應有的事情。