当前位置: 首页 > 知识库问答 >
问题:

Camel文件组件无法使用多个线程并行使用

钱选
2023-03-14

我有一个目录,文件正被一条骆驼路由推送到其中。从同一个目录,我需要多个线程来使用文件并处理它们。

<route id="processMessagesFromDirectory">
    <from uri="file:/directory?readLock=changed" />
        <threads poolSize="8"></threads>
        <doTry>
            <log message="process Initiated for ${body}" />
            <doCatch>
                <exception>java.lang.Exception</exception>
            </doCatch>
        </doTry>
    <log message="Processed ${body}" />
</route>

我知道使用1个线程,readlock=changed将引入至少1000ms的延迟。使用多个线程时,发生了同样的事情,一个线程等待1000ms拾取一个文件并进行处理,然后另一个线程拾取另一个文件并进行处理,等等。使用readlock=changed选项到底发生了什么?我怎样才能引入并行性呢?

通过不使用readlock=markerfile选项,我能够并行地处理它们,但我不想处理部分消息,也不想多次处理消息。我怎么能那样做?

共有1个答案

盖高畅
2023-03-14

如果需要使用readlock,可以将其值设置为markerfile。这将允许异步处理文件。

<routes xmlns="http://camel.apache.org/schema/spring">
    <route id="processMessagesFromDirectory">
        <from uri="file:/directory?readLock=markerFile" />
        <threads poolSize="8" />
            <doTry>
                <log message="process Initiated for ${body}" />
                <doCatch>
                    <exception>java.lang.Exception</exception>
                </doCatch>
            </doTry>
        <log message="Processed ${body}" />
    </route>
</routes>
 类似资料:
  • 问题内容: 我正在尝试使用多个线程在Java中编写一个大文件。 我已经尝试了Java 和类。 实际上,要写入的内容是使用和写入的整个表(Postgres)。文件中的每一行都是表中的一个元组,我一次要写100行。 编写方法: 单个待写入文件由附加模式下的多个线程打开。此后,每个线程都尝试写入文件文件。 以下是我面临的问题: 有时,文件的内容将被覆盖,即:一行仍然不完整,而下一行从那里开始。我的假设是

  • 代码看起来很好,但输出不是。有人建议吗

  • 问题内容: 我正在尝试使用线程下载多个与模式匹配的文件。该模式可以匹配1或5或10个差异大小的文件。 为了简单起见,可以说下载文件的实际代码在downloadFile()方法中,而fileNames是与模式匹配的文件名列表。我该如何使用线程。每个线程将仅下载一个文件。建议在for循环内创建一个新线程。 问题答案: 您确实想使用ExecutorService而不是单个线程,它更干净,性能可能更高,并

  • 在我们的例子中,我们在路线的后面使用jdbc组件。camel-jdbc是否也使用多线程? 如何大致了解给定组件使用的线程模型?

  • 但是,当我第一次调用此路由时,即使指定了fileName参数,文件input1.txt也会被传输。请帮忙。

  • 问题内容: 是否可以使用goroutine并行下载和保存文件? 以下是我的代码,可从我的保管箱下载文件: 当我在命令前给download_file函数添加前缀时,它不起作用。 问题答案: 那是因为您的主要goroutine正在退出。您需要添加一个WaitGroup以等待所有goroutines退出。例如,