【问题标题】:Using Stream Cache With Apache Camel在 Apache Camel 中使用流缓存
【发布时间】:2015-12-09 10:11:38
【问题描述】:

我在下面这个例子中使用流缓存。

我有 3 条路线。

首先,我使用带有标记“\n”的拆分流,读取按行拆分的文件。

     <route id="SPLIT-FLOW" streamCache="true">
        <from uri="file:src/data/forSplitCaching?noop=true"/>
        <split streaming="true">
            <tokenize token="\n"/>
            <to uri="direct:PROCESS-BUSINESS"/>
        </split>
    </route>

然后我做了一个业务流程:

    <route id="PROCESS-BUSINESS" streamCache="true">
        <from uri="direct:PROCESS-BUSINESS"/>
        <bean ref="ProcessBusiness" method="dealRecord"/>
        <to uri="direct:STREAM-CACHING"/>
    </route>

    public class ProcessBusiness {

     public String dealRecord(@Body String body){
     System.out.println(body);
     return body;
}

最后,

    <route id="STREAM-CACHING">
        <from uri="direct:STREAM-CACHING"/>
        <bean ref="ProcessStreamCaching" method="usingStream"/>
        <setHeader headerName="CamelFileName">
            <simple>${header.CamelFileName}.${header.CamelSplitIndex}   </simple>
        </setHeader>
        <to uri="file:src/out"/>
    </route>

   public class ProcessStreamCaching {

     public String usingStream(Exchange exchange){
     Object o = exchange.getIn().getBody(StreamCache.class);
     return  o.toString();
    }

我想在这个过程中获取整个文件 (ProcessStreamCaching)。

如何正确使用流缓存?

拆分前的文件包含:

XXXXX
YYYYY
ZZZZZ
AAAAAAAAAAAAA
BBBBBBBB
CCCCCCCCCCCCCCCCCCCCCCCCCCCCC
SSSSSSSSSSSSSSSS
SSQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
Z

我认为流缓存能够将文件的所有行放入缓存中,我可以检索这些行。

如何查看缓存中的内容?

我想当我在这条路线&lt;route id="SPLIT-FLOW" &gt; 上添加streamCache="true" 时,拆分器的每一行都会放在缓存中。 (或者可能是整个文件)

在最后一个过程ProcessStreamCaching,如果我想从头重新加载inputStream,但是在这个过程中我不能,因为我已经阅读了inputStream

我想继续读取每行流式传输的文件,但在进程中我需要读取例如第一行,这就是我想使用流缓存的原因,它允许我从开始。

可能是我误解了流缓存。

【问题讨论】:

    标签: java caching apache-camel


    【解决方案1】:

    如果你想解析一个流两次(或更多次),你可以先将其转换为字符串,然后再根据需要多次解析。

    请在此处查看类似问题:Exchange.getIn().getBody() returns empty string in camel on second call

    【讨论】:

    • 更多次使用Stream不是目的,因为流缓存可以重新加载Stream,我不知道如何使用它@Sergey
    • 您是否有流缓存的示例,请在其中存储一些日期然后检索它。谢谢
    • 我的答案不是如何使用流缓存,而是为您的问题提供了另一种解决方案(...从头开始浏览文件)。但是,如果您热衷于使用流缓存,只需查看 camel.apache.org/stream-caching.html 中的文档
    • 我无法将 fileSize > 1 GO 的文件转换为字符串,这就是我想使用流缓存的原因,我已经检查了文档,不幸的是我找到了如何实现流缓存而不是如何使用它并检查流缓存的数据。
    • 如果您尝试多次解析 GB 的数据,我很确定流缓存也不起作用。考虑使用数据库或搜索引擎
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多