2

我有一个系统可以获取用户上传的文件并以特定方式处理它们。我在这里唯一要问的是时间——如何在文件上传完成后立即处理它们?

我过去使用过排队系统——例如 beanstalkd,我很确定工作队列应该是这个解决方案的一部分,但我被困在通知部分。问题是上传本身没有连接到处理。上传由 SFTP 服务处理。处理由一组 perl 脚本处理。

如何提醒作业队列上传已完成?

我已经考虑过以下想法,但它们在某些方面都显得老套、脆弱或站不住脚。

  • 以某种方式将校验和发送到作业队列,以便它知道文件已完成。不过,我想不出一个好的方法来做到这一点,因为这样做的东西可能也知道上传已经完成,并且应该直接提醒队列。
  • 确保上传的文件使用其校验和作为其名称。这行不通,因为我们正在处理进行实际上传的用户。
  • 让用户在上传后发送第二个文件“完成”,然后轮询该文件。再一次,对用户来说太复杂了。
  • 观察文件的增长——如果文件在很长一段时间内停止增长,则认为它是完整的。不过,这并不可靠。

如果它很重要,架构是

  • Jscape SFTP 服务器
  • Perl
  • Linux (Ubuntu 10.04) 操作系统

编辑 2012-11-06

我做了更多的研究,发现了这一点:

和这个:

(除其他外,都相似)。长话短说,答案是“您必须以某种方式表明上传已完成;所有其他完成性测试都是不可靠的”。

事实证明,我的 SFTP 服务器确实有一个触发系统,可以触发包括任意进程在内的操作,以响应诸如“文件上传完成”之类的事件。所以我要使用它。我仍然很好奇是否有人找到了更通用的解决方案,但我将关闭此解决方案,因为我认为问题已得到解答。

4

0 回答 0