A content-based router enables you to route messages to the appropriate destination, where the routing decision is based on the message contents. This pattern maps to the corresponding content-based router pattern in FUSE Mediation Router.
The following example shows how to define a content-based router using the ServicMix EIP
component. Incoming messages are routed to the http://test/pipeline/endpoint
endpoint, if a test:echo
element is present in the message body, and to the
test:recipients
endpoint, otherwise:
<eip:content-based-router service="test:router" endpoint="endpoint"> <eip:rules> <eip:routing-rule> <eip:predicate> <eip:xpath-predicate xpath="count(/test:echo) = 1" namespaceContext="#nsContext" /> </eip:predicate> <eip:target> <eip:exchange-target uri="endpoint:test:pipeline:endpoint" /> </eip:target> </eip:routing-rule> <eip:routing-rule> <!-- There is no predicate, so this is the default destination --> <eip:target> <eip:exchange-target service="test:recipients" /> </eip:target> </eip:routing-rule> </eip:rules> </eip:content-based-router>
The following example shows how to define an equivalent route using FUSE Mediation Router XML configuration:
<route> <from uri="jbi:endpoint:http://progress.com/demos/test/router/endpoint"/> <choice> <when> <xpath>count(/test:echo) = 1</xpath> <to uri="jbi:endpoint:http://progress.com/demos/test/pipeline/endpoint"/> </when> <otherwise> <!-- This is the default destination --> <to uri="jbi:service:http://progress.com/demos/test/recipients"/> </otherwise> </choice> </route>
The following example shows how to define an equivalent route using the FUSE Mediation Router Java DSL:
from("jbi:endpoint:http://progress.com/demos/test/router/endpoint"). choice().when(xpath("count(/test:echo) = 1")).to("jbi:endpoint:http://progress.com/demos/test/pipeline/endpoint"). otherwise().to("jbi:service:http://progress.com/demos/test/recipients");