user2917629
user2917629

Reputation: 942

camel when/otherwise for activemq and seda

I have a route where I'd like to compute if "from" is activemq or something else. I found replaceFromWith, but it seems to be used for testing only. I tried using camel's choice when/otherwise to switch between "from activemq" and "from seda", but that errors out as invalid syntax. I'm looking for something that would do the following:

<route id="doPost">     
    <choice>
        <when>
            <groovy>exchange.getIn().getHeader("sometest") != null</groovy>                 
            <from uri="activemq:doPost?..."/>
        </when>
        <otherwise>                                
            <from uri="seda:doPost?....."/>
        </otherwise>
    </choice>   

Thanks in advance, appreciate the help.

Upvotes: 0

Views: 225

Answers (1)

Ahmad Y. Saleh
Ahmad Y. Saleh

Reputation: 3349

You cannot dynamically select a consumer based on the exchange, the exchange wont exist before consuming it using the <from .../> tag.

Instead, you can construct a route for each consumer, normalize the exchange you receive from different types of consumers, and forward them to a common route for processing.

<route id="activemqConsumerRoute">
  <from uri="activemq:doPost?..."/>
  <!-- normalize the exchange to be understandable by the next route -->
  <to uri="direct:commonProcessingRoute" />
</route>

<route id="sedaConsumerRoute">
  <from uri="seda:doPost?....."/>
  <!-- normalize the exchange to be understandable by the next route -->
  <to uri="direct:commonProcessingRoute" />
</route>

<route id="commonProccessingRoute">
  <from uri="direct:commonProcessingRoute" />
  <!-- whatever business logic you have -->
</route>

Upvotes: 1

Related Questions