Juraj Kupka
Juraj Kupka

Reputation: 1

on-demand/trigger based camel route

I'm trying to implement the following JMS message flow using camel routes: there is a topic published on external message broker. My program is listening for messages on this topic. Each incoming message triggers specific route to be executed - ONE TIME ONLY (some kind of ad-hoc, disposable route). This route is supposed to move messages between queues within my internal message broker based on some selector (get all messages from queue A matching given selector and move them to queue B). I'm only starting with camel and so far I figured out just the first part - listening for messages on topic:

<bean id="somebroker" class="org.apache.camel.component.jms.JmsComponent"
    p:connectionFactory-ref="rmAdvisoriesConnectionFactory"/>

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
    <endpoint id="jms" uri="somebroker:topic:sometopic"/>
    <route id="routeAdvisories">
        <from ref="jms"/>
        <to>???</to>
    </route>
</camelContext>

Can you suggest a destination for these advisory messages? I need to read some of their JMS properties and use these values to construct JMS selector that will be used for the "move messages" operation. But I have no idea how to declare and trigger this ad-hoc route. It would be ideal if I could define it within the same camelContext using only Spring DSL. Or alternatively, I could route advisories to some java method, which would be creating and executing this ad-hoc routes. But if this isn't possible, I'll be grateful for any suggestion. Thanks.

Upvotes: 0

Views: 804

Answers (2)

Juraj Kupka
Juraj Kupka

Reputation: 1

I couldn't get it working the way I intended, so I had to abandon my original approach. Instead of using camel routes to move messages between queues (now I'm not sure camel routes are even intended to be used this way) I ended up using ManagedRegionBroker - the way JMX operation "moveMatchingMessagesTo" is implemented - to move messages matching given selector.

Upvotes: 0

CookieSoup
CookieSoup

Reputation: 408

As far as I understand, it will be useful to use the 'selector' option, in your JMS consumer route, for example:

from("activemq:queue:test?selector=key='value1'").to("mock:a");
from("activemq:queue:test?selector=key='value2'").to("mock:b");

Maybe, another option is to implement some routes based on 'Content Based Router Pattern" through "choice" option. You can find more info here: http://camel.apache.org/content-based-router.html

I hope it helps.

Upvotes: 0

Related Questions