You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Ricardo Melo <ri...@cflex.com.br> on 2010/03/03 22:16:11 UTC

Dynamic Activemq failover

Hi,

I have an issue about using the activemq failover. I think you can help me.

My system uses camel (using cxf, mail, tcp and other components) and uses an
activemq queue to send out messages, using a variable number of routes "TO"
destinations. Recently, We've found the need to use activemq failover when
sending a message, and give a message to user if the communication has a
problem.

In my system all camel routes can be dynamically added/updated, using system
received XML messages that specifies the route name, transport type, address
and an unique id. For each added route, an activemq queue is created with
the sufix "_<routeId>" in its name. Then a camel route is created to send
messages from that queue to the route address specified in the message. Thus
messages can be sent by email, web services, or whatever.

Example:
Message contains message "Hello", route id=1, transport=file, address=:/dir
Would create a route from("activemq:queue:out_1".to("file:/dir")
Then messages to route id=1 would be put in the above queue and then in the
file:/dir

The questions are:

1) How can I declare the failover in this situation?

1) How can I add the failover to the dynamically added queue, using the
received route 'TO' address contained in the message? Is it possible to
configure dynamically, using a RoutBuilder?

I need to declare a failover that tries to send the message to the "TO"
address contained in the message, trying for 1 second.

2) Is it possible to dynamically declare the failover, and if the route is
updated, update the failover configuration?

Thank you,
Ricardo Melo

Re: Dynamic Activemq failover

Posted by Ricardo Melo <ri...@cflex.com.br>.
Willem,

I've decided to try another solution, which worked well.

I needed to give a message when a connection problem occurs. I'd solved that
using the exception clause in the route definition, that uses a bean to log
the error:

        from(origin)

            .onException(ConnectException.class)
            .maximumRedeliveries(3)
            .handled(true)
            .to("bean:communicationExceptionHandlerBean")
            .end()

        .to(destination);

Failover was not what I was looking for, since my problem is simple.

Anyway thanks for the help.

Best regards,
Ricardo

On Wed, Mar 3, 2010 at 9:51 PM, Willem Jiang <wi...@gmail.com> wrote:

> AFAIK, you just need to configure the brokerURL of activeMQ component with
> the failover transport URI[1], like this
>
>  <bean id="activemq"
> class="org.apache.activemq.camel.component.ActiveMQComponent">
>    <property name="brokerURL"
> value="failover://(tcp://localhost:61616,tcp://remotehost:61616)?initialReconnectDelay=100
> "/>
>  </bean>
>
> And I don't think current camel-activemq endpoint's URI support to
> configure the failover transport dynamically, as the brokerURL is
> transparent to camel-activemq endpoint.
>
> Willem
>
>
> Ricardo Melo wrote:
>
>> Hi,
>>
>> I have an issue about using the activemq failover. I think you can help
>> me.
>>
>> My system uses camel (using cxf, mail, tcp and other components) and uses
>> an
>> activemq queue to send out messages, using a variable number of routes
>> "TO"
>> destinations. Recently, We've found the need to use activemq failover when
>> sending a message, and give a message to user if the communication has a
>> problem.
>>
>> In my system all camel routes can be dynamically added/updated, using
>> system
>> received XML messages that specifies the route name, transport type,
>> address
>> and an unique id. For each added route, an activemq queue is created with
>> the sufix "_<routeId>" in its name. Then a camel route is created to send
>> messages from that queue to the route address specified in the message.
>> Thus
>> messages can be sent by email, web services, or whatever.
>>
>> Example:
>> Message contains message "Hello", route id=1, transport=file,
>> address=:/dir
>> Would create a route from("activemq:queue:out_1".to("file:/dir")
>> Then messages to route id=1 would be put in the above queue and then in
>> the
>> file:/dir
>>
>> The questions are:
>>
>> 1) How can I declare the failover in this situation?
>>
>> 1) How can I add the failover to the dynamically added queue, using the
>> received route 'TO' address contained in the message? Is it possible to
>> configure dynamically, using a RoutBuilder?
>>
>> I need to declare a failover that tries to send the message to the "TO"
>> address contained in the message, trying for 1 second.
>>
>> 2) Is it possible to dynamically declare the failover, and if the route is
>> updated, update the failover configuration?
>>
>> Thank you,
>> Ricardo Melo
>>
>>
>


-- 
Ricardo Britto Melo

CFlex - Empower your Decisions
Tel: (+55 19) 3251-5211
Rua BarĂ£o de Paranapanema, 401A
Campinas - SP
www.cflex.com.br

Re: Dynamic Activemq failover

Posted by Willem Jiang <wi...@gmail.com>.
AFAIK, you just need to configure the brokerURL of activeMQ component 
with the failover transport URI[1], like this

   <bean id="activemq" 
class="org.apache.activemq.camel.component.ActiveMQComponent">
     <property name="brokerURL" 
value="failover://(tcp://localhost:61616,tcp://remotehost:61616)?initialReconnectDelay=100
"/>
   </bean>

And I don't think current camel-activemq endpoint's URI support to 
configure the failover transport dynamically, as the brokerURL is 
transparent to camel-activemq endpoint.

Willem

Ricardo Melo wrote:
> Hi,
> 
> I have an issue about using the activemq failover. I think you can help me.
> 
> My system uses camel (using cxf, mail, tcp and other components) and uses an
> activemq queue to send out messages, using a variable number of routes "TO"
> destinations. Recently, We've found the need to use activemq failover when
> sending a message, and give a message to user if the communication has a
> problem.
> 
> In my system all camel routes can be dynamically added/updated, using system
> received XML messages that specifies the route name, transport type, address
> and an unique id. For each added route, an activemq queue is created with
> the sufix "_<routeId>" in its name. Then a camel route is created to send
> messages from that queue to the route address specified in the message. Thus
> messages can be sent by email, web services, or whatever.
> 
> Example:
> Message contains message "Hello", route id=1, transport=file, address=:/dir
> Would create a route from("activemq:queue:out_1".to("file:/dir")
> Then messages to route id=1 would be put in the above queue and then in the
> file:/dir
> 
> The questions are:
> 
> 1) How can I declare the failover in this situation?
> 
> 1) How can I add the failover to the dynamically added queue, using the
> received route 'TO' address contained in the message? Is it possible to
> configure dynamically, using a RoutBuilder?
> 
> I need to declare a failover that tries to send the message to the "TO"
> address contained in the message, trying for 1 second.
> 
> 2) Is it possible to dynamically declare the failover, and if the route is
> updated, update the failover configuration?
> 
> Thank you,
> Ricardo Melo
>