Fuse 6 is no longer supported
As of February 2025, Red Hat Fuse 6 is no longer supported. If you are using Fuse 6, please upgrade to Red Hat build of Apache Camel.Ce contenu n'est pas disponible dans la langue sélectionnée.
8.16. Dynamic Router
Dynamic Router
Copier lienLien copié sur presse-papiers!
					The Dynamic Router pattern, as shown in Figure 8.13, “Dynamic Router Pattern”, enables you to route a message consecutively through a series of processing steps, where the sequence of steps is not known at design time. The list of endpoints through which the message should pass is calculated dynamically at run time. Each time the message returns from an endpoint, the dynamic router calls back on a bean to discover the next endpoint in the route.
				
Figure 8.13. Dynamic Router Pattern
					In Camel 2.5 we introduced a 
dynamicRouter in the DSL, which is like a dynamic Routing Slip that evaluates the slip on-the-fly.
				Beware
						You must ensure the expression used for the 
dynamicRouter (such as a bean), returns null to indicate the end. Otherwise, the dynamicRouter will continue in an endless loop.
					Dynamic Router in Camel 2.5 onwards
Copier lienLien copié sur presse-papiers!
					From Camel 2.5, the Dynamic Router updates the exchange property, 
Exchange.SLIP_ENDPOINT, with the current endpoint as it advances through the slip. This enables you to find out how far the exchange has progressed through the slip. (It's a slip because the Dynamic Router implementation is based on Routing Slip).
				Java DSL
Copier lienLien copié sur presse-papiers!
					In Java DSL you can use the 
dynamicRouter as follows:
				from("direct:start")
    // use a bean as the dynamic router
    .dynamicRouter(bean(DynamicRouterTest.class, "slip"));
from("direct:start")
    // use a bean as the dynamic router
    .dynamicRouter(bean(DynamicRouterTest.class, "slip"));
					Which will leverage a Bean to compute the slip on-the-fly, which could be implemented as follows:
				
Note
						The preceding example is not thread safe. You would have to store the state on the 
Exchange to ensure thread safety.
					Spring XML
Copier lienLien copié sur presse-papiers!
					The same example in Spring XML would be:
				
Options
Copier lienLien copié sur presse-papiers!
					The 
dynamicRouter DSL command supports the following options:
				| Name | Default Value | Description | 
|---|---|---|
| uriDelimiter | , | Delimiter used if the Expression returned multiple endpoints. | 
| ignoreInvalidEndpoints | false | If an endpoint uri could not be resolved, should it be ignored. Otherwise Camel will thrown an exception stating the endpoint uri is not valid. | 
@DynamicRouter annotation
Copier lienLien copié sur presse-papiers!
					You can also use the 
@DynamicRouter annotation. For example:
				
					The 
route method is invoked repeatedly as the message progresses through the slip. The idea is to return the endpoint URI of the next destination. Return null to indicate the end. You can return multiple endpoints if you like, just as the Routing Slip, where each endpoint is separated by a delimiter.
				