blob: b6b73eedcb53e5db58b94f56ceb57ab12b5689bc [file] [log] [blame]
[[MessageRouter-MessageRouter]]
= Message Router
The
http://www.enterpriseintegrationpatterns.com/MessageRouter.html[Message
Router] from the xref:enterprise-integration-patterns.adoc[EIP patterns]
allows you to consume from an input destination, evaluate some predicate
then choose the right output destination.
image::eip/MessageRouter.gif[image]
The following example shows how to route a request from an input
*queue:a* endpoint to either *queue:b*, *queue:c* or *queue:d* depending
on the evaluation of various xref:predicate.adoc[Predicate] expressions
== Examples
The following example shows how to route a request from an input
*seda:a* endpoint to either *seda:b*, *seda:c* or *seda:d* depending on
the evaluation of various xref:predicate.adoc[Predicate] expressions
[source,java]
----
RouteBuilder builder = new RouteBuilder() {
public void configure() {
from("direct:a")
.choice()
.when(simple("${header.foo} == 'bar'"))
.to("direct:b")
.when(simple("${header.foo} == 'cheese'"))
.to("direct:c")
.otherwise()
.to("direct:d");
}
};
----
TIP: See xref:faq/why-can-i-not-use-when-or-otherwise-in-a-java-camel-route.adoc[Why
can I not use when or otherwise in a Java Camel route] if you have
problems with the Java DSL, accepting using `when` or `otherwise`.
And the same example using XML:
[source,xml]
----
<camelContext xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="direct:a"/>
<choice>
<when>
<simple>${header.foo} == 'bar'</simple>
<to uri="direct:b"/>
</when>
<when>
<simple>${header.foo} == 'cheese'</simple>
<to uri="direct:c"/>
</when>
<otherwise>
<to uri="direct:d"/>
</otherwise>
</choice>
</route>
</camelContext>
----
[[MessageRouter-Choicewithoutotherwise]]
== Choice without otherwise
If you use a `choice` without adding an `otherwise`, any unmatched
exchanges will be dropped by default.