使用SFTP文件夹作为并发工作队列的最佳方法

时间:2010-04-06 14:49:22

标签: c# message-queue sftp

我正在编写一个c#windows服务,它将轮询SFTP文件夹以查找新文件(一个文件=一个作业)并进行处理。多个服务实例可能同时运行,因此重要的是它们不会相互踩踏。

我意识到SFTP文件夹不能构成理想的队列,但这就是我必须要处理的事情。要将此SFTP文件夹用作并发消息队列,还是以可以同时使用的方式安全地表示它,我需要做什么?

4 个答案:

答案 0 :(得分:1)

似乎你最大的问题就是处理程序的多个实例相互踩踏并处理相同的文件。

我过去处理这个问题的方法是让程序获取第一个文件并立即将其重命名为'filename.txt'到'filename.txt.processing'。这些进程将被设置为忽略以“.processing”结尾的任何文件,以便它们不会相互踩踏。我不认为文件重命名是完全原子的,但我从来没有遇到任何问题。

答案 1 :(得分:0)

  

服务的多个实例可能   同时运行

在同一台机器上,还是不同的机器上?

答案 2 :(得分:0)

不确定在Windows中移动文件是否为原子操作。 如果是,那么当服务选择处理文件时,它应该尝试将文件移动到另一个文件夹。 如果移动操作成功,则可以安全地处理该文件。

答案 3 :(得分:0)

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

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