dynamic change endpoint camel

2019-01-20 02:19发布

问题:

Is it possible to change from endpoint in dynamic way ? for example I want change

for(endpointFirst).routeId(ROUTEID).to(finishEndpoint);

to

for(endpointSecond).routeId(ROUTEID).to(finishEndpoint);

I try use

camelContext.stopRoute(TestRoute.ROUTEID);

change old endpoint to new endpoint

camelContext.startRoute(TestRoute.ROUTEID);

but my efforts not work properly.

thanks for any help

回答1:

You would need to

  1. stop the route
  2. remove the route
  3. change the endpoint
  4. add the route
  5. start the route

This allows you to change the from endpoint to whatever you want (for example something else)

Some components / endpoint do allow to change options an have those being updated at runtime. For example the JMS endpoint allows this, so you can

  1. stop the route
  2. change an option on the jms endpoint
  3. start the route

But there may be some components which cannot do that.



回答2:

to change the from endpoint, you can just dynamically add/remove routes via the context APIs or alter the route as Claus suggested

to change destination endpoints, use the recipient list EIP and an Expression to dynamically determine the endpoint based on message headers, variables, methods, etc...

from("direct:a")
     .recipientList(header("foo"));