2011-10-12 18 views
2

我有一個Windows服務,監視幾個郵箱的新郵件。一旦新郵件到達,該服務負責確定如何處理它。它可以解析它並將其輸入到數據庫中,忽略它,或者如果它不識別它,則將其轉發給某人。一切工作時處理離線數據庫?

如果/當我們的電子郵件服務器出現故障,服務將嘗試重新連接每個n分鐘直到成功爲止,我已經有一個工作實現。另一個問題是如果/當數據庫服務器出現故障時會發生什麼情況。我們的服務仍然可以運行並解析電子郵件,但如果數據庫插入失敗,則會停止運行。

如何處理數據庫關閉?而不是讓我的服務負責與數據庫交互,我是否使用NServiceBus之類的消息框架,併爲每個需要添加的新項目發送消息。然後這個服務會嘗試並處理它。如果處理由於某種原因而失敗(很可能是數據庫已關閉),只需將該項保留在隊列中以供稍後處理?

+3

對你的最後一段是:查看可靠的消息隊列協議,如MSMQ。如果數據庫出現故障,您的服務可以繼續工作,並且工作將排隊,直到數據庫恢復正常,此時所有排隊的消息都會發送出去。 –

回答

2

一種可能性:

如果數據庫關閉,序列化完成的工作,以XML或二進制格式,並存儲在文件系統中,如果數據庫關閉。考慮這個離線隊列。數據庫恢復時,請讓進程將數據反序列化,然後將其存儲在數據庫中。

這樣你仍然可以考慮處理的數據並在以後插入它。隊列(備份)是文件系統。