If you are talking about how to not pickup new files in a Camel from
route, then take a look at the various read lock documentation on the
file component.

On Tue, Nov 5, 2013 at 2:39 PM, Ben Hood <0x6e6...@gmail.com> wrote:
> Hi,
>
> In my first attempt to use Camel I’ve run into a intra-route timing issue 
> that I’ve only solved with a hack, so I was wondering whether there are any 
> best practices of dealing with timing issues when dealing with multiple 
> processing steps in a batch file pipeline.
>
> Basically I am trying to avoid doing an HTTP POST with an empty payload, 
> since the route performing the HTTP POST is triggered before the file that it 
> is wired to upload has been written.
>
> If I turn stream caching on, this problem goes away. However, since some 
> files can be quite big, I’d prefer not to have do stream caching.
>
> So to solve the issue, I’ve written a workaround bean that just does a 
> Thread.sleep() in order to wait for the upload file to actually get some data 
> in it before firing off the HTTP POST.
>
> I’ve got a two step pipeline that:
>
> 1. Transcodes a batch input file into an intermediate format (using msgpack 
> serialization);
> 2. Performs an HTTP POST of the intermediate format to a remote server;
>
> I’d like to keep the intermediate format around on disk for debugging and 
> manual replay tasks.
>
> My camel context has two routes:
>
> <route id=“transcode-to-msgpack">
>       <from uri="file:/tmp/d"/>
>       <log message="Transcoding ${file:name} to msgpack" />
>       <to uri="bean:transcoder"/>
>       <to uri="file:/tmp/b?fileName=${file:name.noext}.msgpack"/>
> </route>
>
> <route id=“post-msgpack-payload">
>       <from uri="file:/tmp/b"/>
>       <from uri="file:/tmp/e"/>
>       <log message="POSTing ${file:name} to the rating API" />
>       <setProperty propertyName="url.template">
>                 
> <constant>http://localhost:9999/calls/:source/:sequence</constant>
>       </setProperty>
>       <process ref=“httpDataPump"/>
> </route>
>
> I have two custom beans doing the work:
>
> 1. transcoder - This takes an InputStream, and returns an InputStream that 
> wraps and transcodes the InputStream from the file;
> 2. httpDataPump - This contains an HTTP client that uploads the 
> FileInputStream the the InMessage from the Exchange refers.
>
> Doing a Thread.sleep() seems like a real hack to me, so I was wondering if 
> there is a more idiomatic way to solve the issue. I’ve looked into the 
> preMoveNamePrefix options, but they appear to apply only to input files. 
> Ideally I’m looking for something that can move the output file after it has 
> been written.
>
> Any pointers are appreciated.
>
> Cheers,
>
> Ben



-- 
Claus Ibsen
-----------------
Red Hat, Inc.
Email: cib...@redhat.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen

Reply via email to