camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ming Fang <>
Subject Re: Jms remoting failover problem
Date Sun, 22 Nov 2009 05:39:04 GMT
Here is the smallest problem that demonstrates the problem.

Java file

package test;

import org.apache.activemq.camel.component.*;
import org.apache.camel.CamelContext;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.bean.ProxyHelper;
import org.apache.camel.impl.DefaultCamelContext;
import org.apache.log4j.*;

public class ActiveMQTest {

    public static void main(String[] args) throws Exception {
        Logger.getRootLogger().addAppender(new ConsoleAppender(new PatternLayout(PatternLayout.DEFAULT_CONVERSION_PATTERN)));
        System.getProperties().put("org.apache.camel.jmx.disabled", "true");

        //needs at least 2 servers to see problem.

        CamelContext camelContext = new DefaultCamelContext();
        ActiveMQConfiguration configuration = new ActiveMQConfiguration();
        camelContext.addComponent("jms", new ActiveMQComponent(configuration));

        //invoke server. likely to fail when sleepTime is over 30 seconds
        Echo service = ProxyHelper.createProxy(camelContext.getEndpoint("jms:queue:echo"),
        int sleepTime = 31000;
        while (true) {

    private static void simulatorServer(final String url) throws Exception {
        //each server is listening on a dedicated broker
        BrokerService broker = new BrokerService();

        ActiveMQConfiguration configuration = new ActiveMQConfiguration();
        CamelContext camelContext = new DefaultCamelContext();
        camelContext.addComponent("jms", new ActiveMQComponent(configuration));

        camelContext.addRoutes(new RouteBuilder() {
            public void configure() {
                from("jms:queue:echo").bean(new Echo(){
                    public String echo(String text) {
                        return "Echo " + text + " from " + url;

    //server interface
    public static interface Echo{
        String echo(String text);

Pom file

<project xmlns="" xmlns:xsi=""


On Nov 21, 2009, at 1:26 AM, Claus Ibsen wrote:

> On Sat, Nov 21, 2009 at 7:18 AM, Ming Fang <> wrote:
>> Does anyone know of a fix for this?
>> This is a critical problem for us, and for many I would think since this is a very
typical configuration.
> Have you asked /searched at the AMQ forum also?
> Try creating a small application that demonstrates your issue so its
> easier for others to try to reproduce the issue.
> And make that application as simple as possible so there are less
> moving parts to get confused by.
>> On Nov 19, 2009, at 6:59 AM, Ming Fang wrote:
>>> Yes changing idelTimeOut in org.apache.activemq.pool.ConnectionPool to a very
large number would be a workaround.
>>> However I don't see anyway of doing that in org.apache.activemq.camel.component.ActiveMQConfiguration.
>>> But ultimately I think the way Camel uses JMS is just wrong;
>>> The use of a Requestor to listen for out messages will always be a problem because
it's not guarantee to be listening on the same broker as the publisher.
>>> --ming
>>> On Nov 19, 2009, at 4:42 AM, Willem Jiang wrote:
>>>> Hi,
>>>> How about change the idle time of switching the broker ?
>>>> If the idle time is larger than your application response time, you will
not get this kind trouble anymore.
>>>> Willem
>>>> Ming Fang wrote:
>>>>> Hi
>>>>> We're using Camel 2.0 with Activemq 5.3.
>>>>> Our app uses Camel jms remoting.
>>>>> It's connecting to two discrete ActiveMQ brokers using the failover transport
randomly. Everything works fine at first.
>>>>> The problem happens when the app is idle for more than 30 seconds. After
that any remote call will trigger Activemq client to reconnect and may end up connecting to
another broker. But the problem is the Requestor does not reconnect and still connected to
the original broker. The result is calls are sent to one broker but the Requestor is listening
to a different broker for the response.
>>>>> Is there a way to force the Requestor to use the same connection as the
>>>>> --Ming
> -- 
> Claus Ibsen
> Apache Camel Committer
> Author of Camel in Action:
> Open Source Integration:
> Blog:
> Twitter:

View raw message