【发布时间】: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
我认为流缓存能够将文件的所有行放入缓存中,我可以检索这些行。
如何查看缓存中的内容?
我想当我在这条路线<route id="SPLIT-FLOW" > 上添加streamCache="true" 时,拆分器的每一行都会放在缓存中。 (或者可能是整个文件)
在最后一个过程ProcessStreamCaching,如果我想从头重新加载inputStream,但是在这个过程中我不能,因为我已经阅读了inputStream。
我想继续读取每行流式传输的文件,但在进程中我需要读取例如第一行,这就是我想使用流缓存的原因,它允许我从开始。
可能是我误解了流缓存。
【问题讨论】:
标签: java caching apache-camel