【问题标题】:Queuing jobs in a processing chain in Java在 Java 中的处理链中排队作业
【发布时间】:2011-09-11 20:19:21
【问题描述】:

我目前正在用 java 设计一个关联引擎,它从 pdf 文件中提取数据并关联(在必要时发出警报)它来自关系数据库的结构化数据。

专注于系统组成的pdf文件的处理:

从 pdf 中执行自定义提取的组件。

将有时无序的不干净数据解析为所需数据结构的组件

一个标准化组件,用于标准化比较值

还有一个与数据库接口的组件(提取的数据将与其余数据一起插入)

这些组件应该可以在其他处理链中重复使用,但它们最初都将在同一个系统上运行。

我认为在组件之间进行某种缓冲是明智的,使用 JMS 队列是明智的还是这会使事情变得过于复杂?我一直在试验一个简单的linkedblockingqueue对象,但是这个对象必须在组件之间传递,所以它需要一个主组件来驱动我不确定是否需要的所有东西,有没有解决这个问题的标准方法?

【问题讨论】:

    标签: java queue jms correlation


    【解决方案1】:

    除非您有其他要求,否则我会使用链式调用。

    loadPDF(new PDFExtractor(new PDFParser(new Normalizer(new DBEnricher(listener)))));
    

    如果你想要多个线程,我会使用 ExecutorService 线程池在不同的线程中处理每个文件。

    【讨论】:

    • 将队列对象包含在每个组件中以完成作业并让处理程序从中提取或将队列放在单独的处理程序中是否相当标准?
    • 我会让一个组件通过方法调用调用另一个组件并在发生错误时返回结果或抛出异常。我认为不需要队列。
    • 使用队列的想法是,一些作业将是处理器和内存密集型的,最好让这些任务完成并将结果排队,以便可以释放资源,还有队列可以被并发运行的多个线程消耗
    • 如果您只有一个 PDF 文件,并且需要同时处理部分文件,这是一件很有用的事情。但是我怀疑您可以同时处理多个文件,即您的文件比核心多,并且添加队列会增加编码和处理开销,并且可能比更简单的解决方案要慢。
    猜你喜欢
    • 2015-07-06
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多