我們使用SQL Server 2008 R2來處理郵件隊列。新郵件進入隊列,然後每分鐘一次批處理文件讀取未處理的郵件,進行一些處理,通過smtp發送郵件並在發送隊列中標記郵件(記錄不會從隊列中刪除,因爲表也用作郵件歷史記錄表)。SQL觸發批處理文件
這種方法的問題是,它僅運行一分鐘一次這樣的郵件不是「自動」發出去了,批處理文件運行,每分鐘,即使有好幾個小時沒有傳出郵件。
是否有SQL服務器的方式來運行插入到郵件隊列上的每個新項目的批處理文件?我知道有觸發器,但從我明白他們是異步的,所以如果批處理文件需要時間,它會阻止SQL服務器
爲什麼與外部批處理文件費心呢?您可以直接在SQL Server內部輕鬆實現此功能 - 也可以更輕鬆地進行管理。另外:您可以創建一個每工作x分鐘就會運行一次的SQL作業,並檢查是否需要做任何事情 - 這樣,它就與數據庫的「正常」操作分離開來,並且不會干擾用戶輸入數據 –
發送電子郵件需要在外部運行,因爲在發送之前會執行一些非相關的處理。每隔幾分鐘檢查一次隊列的過程的缺點是,如果不需要,它會運行很多次,另一方面看起來沒有響應,因爲電子郵件將在幾分鐘後而不是立即發生。 – user1480192
你目前的解決方案看起來很好。我不明白你對郵件沒有被「自動」發送的評論,因爲事實上他們是。如果您需要立即發送消息,那麼電子郵件是錯誤的機制,因爲它不是爲此設計的:您不知道需要交付和/或閱讀多長時間。只要有效地查詢數據庫,服務每隔幾分鐘檢查一次數據庫就沒有任何問題。 – Pondlife