2010-04-06 35 views
0

我正在寫一個c#windows服務,它將輪詢新文件(一個文件=一個作業)的SFTP文件夾並處理它們。服務的多個實例可能會同時運行,因此重要的是它們不要互相踩在一起。使用SFTP文件夾作爲併發工作隊列的最佳方法

我意識到一個SFTP文件夾並不是一個理想的隊列,但這就是我必須使用的。我需要做什麼才能將此SFTP文件夾用作併發消息隊列,或者以可同時使用的方式安全地表示它?該服務的

回答

0

多個實例可以 同時

在同一臺機器上,或者是不同的運行?

+0

不同的 – 2010-04-06 15:14:19

0

不確定在Windows中移動文件是否是原子操作。 如果是,那麼當服務選擇在文件上工作時,它應該嘗試將文件移動到另一個文件夾。 如果移動操作成功,那麼在文件上工作是安全的。

1

看起來像你最大的問題將是處理程序的多個實例相互踩踏並處理相同的文件。

我過去處理這個的方式是讓程序抓住第一個文件並立即將它從'filename.txt'重命名爲'filename.txt.processing'。這些進程將被設置爲忽略以'.processing'結尾的任何文件,以便它們不會彼此相繼。我不認爲文件重命名是完全原子的,但我從來沒有遇到任何問題。

0

您還可以利用數據庫來跟蹤哪些文件正在處理,已處理或正在等待處理。

這增加了與新文件更新表的複雜性。

相關問題