Solved! I didn't find anything built in, so I did the following:

1. Add a custom Producer based on the File producer, that overrides 
createFileName to add a suffix when the file is a duplicate:

        class ArchiveProducer(endpoint: GenericFileEndpoint[File], operations: 
GenericFileOperations[File])
                extends GenericFileProducer[File](endpoint, operations) {

2. Add a custom endpoint that overrides createProducer to return my custom 
producer:

        class ArchiveEndpoint(uri: String, component: Component) extends 
FileEndpoint(uri, component) {

3. Add a custom component that creates my custom endpoint, by overriding 
buildFileEndpoint:

        class ArchiveComponent extends FileComponent {

4. Register my custom component when setting-up Camel:

        camelContext = CamelContextBuilder()
        camelContext.addComponent("archive", new ArchiveComponent())

5. Change my file:// URIs to archive:// URIs to use my new component.

Peter


On 16 May 2013, at 12:23, Peter Hilton <pedro+ca...@lunatech.com> wrote:
> I’m using Camel to process files, and need to save a copy of each incoming 
> file to an 'archive' directory. In addition, if another file arrives with the 
> same name as an earlier file, I must add this to the archive with a different 
> file name and not overwrite an existing archive file.
> 
> Two questions:
> 
> 1. Does Camel have something built-in to deal with duplicate messages this 
> way? This differs from ‘Idempotent Consumer’ in that I don't want to skip 
> duplicate files.
> 
> 2. If there is nothing built in, what do I need to do to implement my own 
> 'De-duplicating Archive' end point?

Reply via email to