javaapache-camelcamel-ftp

How to read file only once when app deployed on two nodes


I'm going to read files from SFTP location line by line:

@Override
public void configure() {
    from(sftpLocationUrl)
            .routeId("route-name")
            .split(body().tokenize("\n"))
            .streaming()
            .bean(service, "build")
            .to(String.format("activemq:%s", queueName));
}

But this application will be deployed on two nodes, and I think that in this case, I can get an unstable and unpredictable application work because the same lines of the file can be read twice. Is there a way to avoid such duplicates in this case?


Solution

  • Camel has some (experimental) clustering capabilities - see here.

    In your particular case, you could model a route which is taking the leadership when starting the directory polling, preventing thereby other nodes from picking the (same or other) files.