Я использую кэширование потоков с помощью этого примера ниже.Использование кэша потоков с помощью Apache Camel
У меня есть три маршрута.
Во-первых, я использовал разбитую поточную передачу с токеном «\ 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
Я думал, что кэш потока был в состоянии поставить все строки файла в кэше, и я могу получить эти строки.
Как я могу увидеть, что находится в кеше?
Я думал, когда я добавлю streamCache="true"
по этому маршруту <route id="SPLIT-FLOW" >
, каждая строка сплиттера будет помещена в кэш. (Или может быть весь файл)
На последнем процессе ProcessStreamCaching
, если бы я хотел, чтобы перезагрузить inputStream
с самого начала, но в этом процессе я не могу, потому что я уже прочитал inputStream
.
Я хочу продолжать читать файл с потоковой линией в строке, но в процессе я должен прочитать пример первой строки, поэтому я хотел использовать кеш потока, который позволяет мне просматривать файл с начало.
Возможно, я неправильно понял поток кэш.
Он с не целью, чтобы использовать этот поток несколько раз, так как кэш потока способен перезагрузить поток, и я не знаю, как использовать его @Sergey – Kikou
У вас есть пример кеша потока, в котором вы храните некоторую дату, а затем извлекаете ее. thxs – Kikou
Мой ответ заключается не в том, как использовать потоковый кеш, но он дает вам альтернативное решение вашей проблемы (... просматривать файл с самого начала). Однако, если вы заинтересованы в использовании кеша потока, просто проверьте документацию по адресу http://camel.apache.org/stream-caching.html – Sergey