2010-11-25 60 views
0

我使用的是.NET POP3,.NET 3.5和VS 2008.Pop3多進程,處理一條消息,一次

我在幾臺機器上安裝了Windows服務。每臺計算機(安裝在計算機上的Windows服務)都可訪問同一收件箱POP3(同一帳戶)以獲取進程消息。

使用多線程,同時運行多個腳本實際上是理想的,是否有可能使用組件POP3?

對於任何機器(只有一臺機器必須處理消息),每個消息必須處理一次。

回答

0

當然這是可能的,雖然可怕的低效率。由於POP3被輪詢,你還會引入很多延遲。你爲什麼要分配你的工作量?你真的想要解決什麼?

+0

怎麼可能?任何樣品?我的公司想要這樣做。哪個會更好呢? – Kiquenet 2010-11-26 06:52:08

1

問題是POP3沒有鎖定作業/消息的概念,因此同時登錄到同一個帳戶的多個客戶端將獲得同一組消息。

然而,我不得不解決一個類似的問題,這就是我如何實現它的。首先我使用IMAP而不是POP3。每個客戶端然後在主收件箱下注冊一個文件夾。然後我有一個主節點管理INBOX根文件夾。所有其他節點向主節點請求作業,將作業從根收件箱簡單移動到請求節點文件夾。節點可以直接從其私有文件夾中提取作業,而不必擔心來自其他節點的干擾。

如果您想知道爲什麼需要成爲主節點,這是因爲IMAP沒有原子移動操作,而是一個副本,然後刪除兩個階段操作。這意味着爲了防止任何類型的併發問題,您仍然可以真正只有一個線程/進程訪問INBOX文件夾。

1

I did this myself a couple of years ago

我最終將消息的UID存儲到共享SQL Server表中,並使用UNIQUE約束。
在處理每條消息之前,將其添加到表中。
如果您遇到異常,則其他機器已經抓住它。

+0

codeplex或codeproject中的任何示例代碼? – Kiquenet 2010-12-01 21:26:16