【问题标题】:Technology to transfer data with external system与外部系统传输数据的技术
【发布时间】:2012-01-16 11:12:34
【问题描述】:

我们有一个与外部系统的接口,我们从中获取平面文件并处理这些文件。目前我们每天运行几次作业,检查文件是否在 ftp 位置,然后处理它是否存在。 我最近读到将文件系统用作消息代理是个坏主意,这就是我提出这个问题的原因。有人可以澄清一下这种情况是否适合使用其他工具,如果是的话,是哪一种? 我们的是一个基于 java 的应用程序。

【问题讨论】:

    标签: java interface communication message-queue


    【解决方案1】:

    您应该问的第一个问题是“它有效吗?”。

    如果答案是肯定的,那么您应该谨慎对待更改,因为您阅读它是一个坏主意。我听说巧克力可能对你有害,但我不会放弃它:-)

    您可能会遇到潜在问题,例如文件在您不知情的情况下被删除,或者尝试处理仅传输一半的文件(尽管有一些方法可以缓解这两种情况,例如前一种情况下的权限,或者后一种情况下使用哨兵文件或内容检查)。

    我自己,我更喜欢 IBM 的 MQ 或 JMS 之类的消息队列系统(因为它们就是为此而构建的,而且它们确实让生活变得更轻松)但是,根据上面的第二段,只有满足以下条件之一:

    • 当前解决方案出现或变得明显的问题;或
    • 您有一些空闲时间和金钱可以用于不必要的返工。

    最后一个项目符号需要扩展。虽然这项工作可能是不必要的(就修复不存在的问题而言),但这并不一定会使其无用,尤其是如果它可以提高性能或安全性,或减少维护工作。

    【讨论】:

    • 我完全同意。在这种情况下,轮询“标志文件”是一件非常合适的事情。 没有什么一定有问题。
    • 这不等于文件系统被用作消息代理,本质上类似于编写自己的消息系统(Derek C. Ashmore;J2EE Architect 的手册)?尽管当前的解决方案有效,但我只是想知道将来我可以使用哪种最佳方法来实施这些解决方案。
    • @sarego,不,不完全是,它不涉及“编写自己的消息代理”。我想要表达的是,虽然您可能不应该从头开始编写基于文件系统的消息队列系统,但不要仅仅因为您认为它已经存在而丢弃它i>可能不是最优的。如果您是从头开始,最好的方法是使用已经构建且经过良好测试的消息队列产品,例如 MQ。
    【解决方案2】:

    我会使用数据库来同步您的文件。有一个指向文件位置的数据库。仅在文件已完全传输时才将条目放入数据库。这将确保您拾取已完成的文件。您可以轮询数据库以检查是否存在新条目,而不是轮询文件系统。一个非常简单的轮询机制设置。如果您想在文件夹中出现新文件时被告知,那么您需要进入消息队列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-05
      • 1970-01-01
      • 1970-01-01
      • 2020-03-13
      • 2011-09-23
      • 2011-05-27
      • 1970-01-01
      • 2011-09-02
      相关资源
      最近更新 更多