Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

...

Dynamic

...

Router

...

The

...

Dynamic

...

Router

...

from

...

the

...

EIP

...

patterns

...

allows

...

you

...

to

...

route

...

messages

...

while

...

avoiding

...

the

...

dependency

...

of

...

the

...

router

...

on

...

all

...

possible

...

destinations

...

while

...

maintaining

...

its

...

efficiency.

Image Added

In Camel 2.5

...

we

...

introduced

...

a

...

dynamicRouter

...

in

...

the

...

DSL

...

which

...

is

...

like

...

a

...

dynamic

...

Routing

...

Slip

...

which

...

evaluates

...

the

...

slip

...

on-the-fly

...

.

...

You must ensure the expression used for the dynamicRouter such as a bean, will return null to indicate the end. Otherwise the dynamicRouter will keep repeating endlessly.

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.

cacheSize

1000

Camel 2.13.1/2.12.4: Allows to configure the cache size for the ProducerCache which caches producers for reuse in the routing slip. Will by default use the default cache size which is 1000. Setting the value to -1 allows to turn off the cache all together.

Dynamic Router in Camel 2.5 onwards

From Camel 2.5 the Dynamic Router will set a property (Exchange.SLIP_ENDPOINT)

...

on

...

the

...

Exchange

...

which

...

contains

...

the

...

current

...

endpoint

...

as

...

it

...

advanced

...

though

...

the

...

slip.

...

This

...

allows

...

you

...

to

...

know

...

how

...

far

...

we

...

have

...

processed

...

in

...

the

...

slip.

...

(It's

...

a

...

slip

...

because

...

the

...

Dynamic

...

Router

...

implementation

...

is

...

based

...

on

...

top

...

of

...

Routing

...

Slip

...

).

...

Java

...

DSL

...

In

...

Java

...

DSL

...

you

...

can

...

use

...

the dynamicRouter as shown below:

...

Which

...

will

...

leverage

...

a

...

Bean

...

to

...

compute

...

the

...

slip

...

on-the-fly

...

,

...

which

...

could

...

be

...

implemented

...

as

...

follows:

...

...

Mind

...

that

...

this

...

example

...

is

...

only

...

for

...

show

...

and

...

tell.

...

The

...

current

...

implementation

...

is

...

not

...

thread

...

safe.

...

You

...

would

...

have

...

to

...

store

...

the

...

state

...

on

...

the

...

Exchange,

...

to

...

ensure

...

thread

...

safety, as shown below:

...

You could also store state as message headers, but they are not guaranteed to be preserved during routing, where as properties on the Exchange are. Although there was a bug in the method call expression, see the warning below.

...

Mind that in Camel 2.9.2 or older, when using a Bean the state is not propagated, so you will have to use a Processor instead. This is fixed in Camel 2.9.3 onwards.

Spring XML

The same example in Spring XML would be:

...

@DynamicRouter

...

annotation

...

You

...

can

...

also

...

use

...

the

...

@DynamicRouter

...

annotation,

...

for

...

example

...

the

...

Camel

...

2.4

...

example

...

below

...

could

...

be

...

written

...

as

...

follows.

...

The

...

route

...

method

...

would

...

then

...

be

...

invoked

...

repeatedly

...

as

...

the

...

message

...

is

...

processed

...

dynamically.

...

The

...

idea

...

is

...

to

...

return

...

the

...

next

...

endpoint

...

uri

...

where

...

to

...

go.

...

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.

...

...

Dynamic Router in Camel 2.4

...

or

...

older

...

The

...

simplest

...

way

...

to

...

implement

...

this

...

is

...

to

...

use

...

the

...

RecipientList

...

Annotation

...

on

...

a

...

Bean

...

method

...

to

...

determine

...

where

...

to

...

route

...

the

...

message.

...

...

In the above we can use the Parameter Binding Annotations to bind different parts of the Message to method parameters or use an Expression such as using XPath or XQuery.

The method can be invoked in a number of ways as described in the Bean Integration such as

Using This Pattern