代码之家  ›  专栏  ›  技术社区  ›  Gabe Moothart

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

  •  0
  • Gabe Moothart  · 技术社区  · 15 年前

    我正在编写一个c windows服务,它将轮询sftp文件夹中的新文件(一个文件=一个作业)并对其进行处理。服务的多个实例可能同时在运行,因此它们之间不要相互踩踏是很重要的。

    我意识到sftp文件夹并不是一个理想的队列,但这是我必须处理的。要将此sftp文件夹用作并发消息队列,或者以可并发使用的方式安全地表示它,我需要做什么?

    4 回复  |  直到 15 年前
        1
  •  1
  •   Eric Petroelje    15 年前

    似乎您最大的问题是处理程序的多个实例,这些实例相互重叠并处理相同的文件。

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

        2
  •  0
  •   eemz    15 年前

    服务的多个实例可以 同时跑步

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

        3
  •  0
  •   mbeckish    15 年前

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

        4
  •  0
  •   Development 4.0    15 年前

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

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