Integration / Apache Camel Interview Questions
How does the Message Filter EIP work in Camel?
The Message Filter allows only messages that satisfy a predicate to continue in the route. Messages that do not match are silently dropped (the Exchange is stopped). It is the simplest routing EIP in Camel and is a special case of the Content-Based Router with no otherwise() branch.
from("jms:queue:events")
.filter(header("eventType").isEqualTo("ORDER_PLACED"))
.to("jms:queue:order-events");
// Filter using Simple expression:
from("direct:payments")
.filter(simple("${body.amount} > 1000"))
.to("jms:queue:large-payments");
// Filter with custom Predicate:
from("direct:in")
.filter(exchange -> exchange.getIn().getBody(String.class).startsWith("VIP"))
.to("direct:vip-handler");A filtered (dropped) message triggers no exception — it simply stops routing. To perform a side action on dropped messages, add a wireTap() before the filter. The filter() method accepts any object implementing the Predicate interface, including Simple, XPath, JSONPath, and Java lambda expressions.
More Related questions...