2010-04-06 102 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

您还可以利用数据库来跟踪哪些文件正在处理,已处理或正在等待处理。

这增加了与新文件更新表的复杂性。

相关问题