Intercept
The intercept feature in Camel supports intercepting Exchanges while they are on route.
Camel supports two kinds of interceptors
intercept
that intercepts incoming ExchangeinterceptSendToEndpoint
new in Camel 2.0 that intercepts when an Exchange is about to be sent to the given Endpoint.
Both of these interceptors supports
- Predicate using
when
to only trigger the interceptor in certain conditions proceed
to continue routing from the point of interception when the interceptor is finished.proceed
is default and can be omitted.stop
when used withintercept
will stops routing the Exchange completely. Camel will by default not stop.stop
when used withinterceptSendToEndpoint
will skip sending the Exchange to the original intended endpoint. Camel will by default not skip.
Intercept
Intercept is for intercepting any incoming Exchange, that is it intercepts the from
DSL. This allows you to do some custom behavior for received Exchanges.
So lets start with the logging example. We want to log all the incoming requests so we use intercept
to route to the Log component. As proceed
is default then the Exchange will continue its route, and thus it will continue to mock:first
.
You can also attach a Predicate to only trigger if certain conditions is meet. For instance in the route below we intercept when a test message is send to us, so we can do some custom processing before we continue routing:
And if we want to filter out certain messages we can use the stop()
to instruct Camel to stop continue routing the Exchange:
Using from Spring DSL
Intercept is of course also available using Spring DSL as shown in the sample below:
InterceptSendToEndpoint
Available as of Camel 2.0
Intercept send to endpoint is triggered when an Exchange is being sent to the intercepted endpoint. This allows you to route the Exchange to a Detour or do some custom processing before the Exchange is sent to the original intended destination. You can also skip sending to the intended destination. By default Camel will send to the original intended destination after the intercepted route completes. And as the regular intercept you can also define an when
Predicate so we only intercept if the Predicate evaluates to true. This allows you do do a bit of filtering, to only intercept when certain criteria is meet.
Let start with a simple example, where we want to intercept when an Exchange is being sent to mock:foo
:
And this time we add the Predicate so its only when the message body is Hello World
we intercept.
And to skip sending to the mock:foo
endpoint we use the stop()
DSL in the route at the end to instruct Camel to skip sending. The name *stop() is used as the interceptSendToEndpoint
builds on top of intercept
and thus we inherit the DSL keywords.
Using from Spring DSL
Intercept endpoint is of course also available using Spring DSL.
We start with the first example from above in Spring DSL:
And the 2nd. Notice how we can leverage the Simple language for the Predicate:
And the 3rd with the stop
: