【问题标题】:Multiple servers with a FileSystemWatcher on same directory在同一目录上具有 FileSystemWatcher 的多个服务器
【发布时间】:2011-09-14 04:58:02
【问题描述】:

我希望在监视单个目录的多台服务器上(在共享服务器或 SAN 上)拥有相同的服务。当一个文件出现在该目录中时,我想要一个,并且只有一个服务可以获取该文件并处理其内容。

我试图通过在处理文件之前将文件移出共享目录来对此进行编程。我可以简单地处理无法移动文件的服务器上的异常。问题是发生冲突并导致文件不被任一服务器处理。

文件很可能会分批到达,而不是一个接一个。有谁知道一种可以保证有效的方法?

【问题讨论】:

  • 不幸的是,我无法提供解决方案,但我会说我已经尝试过您在使用 FSW 之前所说的内容,并且出现了太多问题(当从 Win7 中拖入 20 多个文件时)不接他们,等等....)。我最终保留了一个文件名的哈希图来访问时间和诸如此类的东西,并用它来跟踪新的/更改的文件(可能看起来有点慢,但用 C 重写它会快得多)。这是我的解决方案,但它可能对你不起作用,这就是为什么这是一个评论(而且是一个很长的评论)。

标签: c# .net filesystems filesystemwatcher


【解决方案1】:

尝试使用 FSW 提供一项“主”服务。主服务处理所有 FSW 事件并命令远程机器上的“从”服务来处理某个文件。轻松的负载平衡,没有多个 FSW 问题,不需要数据库。您可以使用 WCF 轻松完成此任务。

【讨论】:

  • 我自己也想过这个,但想避免它,因为最好服务器独立运行,从而提供冗余。我想我只需要为主服务器配置故障转移。谢谢。
【解决方案2】:

我将只有一个服务器/服务监视该文件夹并写入数据库文件路径并更改日期和事件(复制,重命名...)然后您可以拥有所有想要获取其中一个最近的新记录的服务该表,锁定并处理它。基本上,由于 FSW 在并发处理方面表现不佳,我们将并发处理移至数据库。

【讨论】:

  • 感谢您的回复,但我们的目标是在此阶段将内容排除在数据库之外 - 这会引入其他问题。
【解决方案3】:

我还将建议来自 Davide Piras 的解决方案。 但是,如果您仍然希望文件观察程序应用程序在多个服务器中寻找共享目录,那么一种解决方案是您在文件观察程序应用程序之间创建 tcp 连接,因为任何文件都到达共享目录,然后是所有文件观察程序应用程序生成随机数并相互共享该数字,然后应用程序生成的最大(或最小)数字应处理该文件。这样,只有一个文件观察应用程序会处理该文件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多