2009-01-28 86 views
1

我目前正在建設兩個窗口服務:Microsoft服務互聯互通問題

  • 首先從互聯網連接需要的信息,然後將這些存入數據庫。這被設計爲快速和穩定,並且不做任何其他處理

  • 第二個執行一個批處理過程,其中包含自上次運行以來已經到達的任何新消息。

我試圖想辦法,這樣,當新郵件準備處理的第二個服務將只運行它的批量處理,如果第二服務失誤的第一個服務將繼續下去,反之亦然。目前它每5秒使用一個循環。

我目前正在考慮使用消息隊列,其中第一個服務只在隊列爲空時寫入消息,第二個服務將查看隊列是否包含任何消息,如果不是進入異步等待直到消息到達,然後刪除該消息並運行。因此,使用隊列不是真正的隊列,而是作爲二進制開關,當它的狀態發生變化時會引發事件被觸發到第二個服務。

我認爲有沒有更好的方法來做到這一點,我沒有遇到過,有人請指出我在正確的方向嗎?

回答

2

其實,你的方法是正確我將如何實現這些結果。使用MSMQ,您不必檢查是否有消息寫入隊列,第一個服務只是寫入隊列,第二個服務只是從中讀取數據以處理它(當它處於活動狀態時)。

使用MSMQ的美妙之處在於其中一個或其他服務可以關閉,但隊列將會啓動,因此您可以繼續處理。

+0

謝謝你的回答casperOne。我已經詳細闡述了我的問題。我可能實際上在濫用隊列機制,因爲我想將消息存儲在數據庫中,而不是將它們全部存儲到隊列中,所以將使用隊列作爲觸發事件的二進制開關。這個可以嗎? – bobwah 2009-01-29 08:51:44

+0

你可以做那樣的事情。當您在隊列中發送消息時,您只需發送與數據庫中記錄的標識相對應的標識。但是,在雙方中,您應該包裝數據庫記錄和隊列消息的寫入以及事務中的接收。 – casperOne 2009-01-29 16:05:22

1

在我看來,就像這種情況下,你需要的只是一個郵筒。第一個服務存儲到數據庫中,然後發送「待辦事宜」消息。另一個只是等待入站消息。

對於這樣簡單的事情,MSMQ有點重量級。然後你可以再次使用MSMQ並且完全擺脫那個數據庫。 就是這樣做的方法。