Why does my file consumer not pick up the file, and how do I let the file consumer use the Camel error handler?

There could be several reasons why the File consumer is not picking up files. For example it may not run at all, or it cannot acquire a read lock on the file.
Check the logs for any exceptions or other informative messages. You can turn on DEBUG logging at org.apache.camel.component.file to see more detail.

How to use Camel's routing error handlers with the file consumer

Well, this is really a "chicken or the egg" question. The Camel error handler (e.g., in the routes) only applies when a message is being routed by the routing engine.
Before this happens, a consumer must successfully receive a message, create a Camel Exchange, populate the Exchange with message details (e.g., body and headers), and then pass the Exchange to the routing engine. Only at this point can the routing error handler deal with exceptions occurring. Before this point, any error handling is really Component-specific.

Bridge with error handler

From Camel 2.10 onwards the file and ftp consumers can now bridge to the Camel routing engine's error handler. See more details at the consumer.bridgeErrorHandler option on the File documentation.

If the component consumer extends the DefaultConsumer from Camel, then it offers an org.apache.camel.spi.ExceptionHandler hook for end users to plug-in a custom strategy. The default implementation from Camel is LoggingExceptionHandler that will log the exception at ERROR/WARN level, and then ignore the exception.

See the File page in the bottom for an example how to use a custom ExceptionHandler that sends a new message to the Camel routing engine, which then allows the routing engine to trigger its own error handling to deal with the exception.

  • No labels