camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ming Fang <mingf...@mac.com>
Subject Re: Jms remoting failover problem
Date Sun, 22 Nov 2009 13:46:19 GMT
Thanks.
But I hope that assigning this issue to 2.3 is just a default and that it will be sooner once
issue is reviewed.
I really need this fixed asap; or at least find a workaround or will have to remove Camel
from our system.

On Nov 22, 2009, at 5:24 AM, Claus Ibsen wrote:

> Hi
> 
> Thanks for the sample project. I have created a ticket to lookup into this
> https://issues.apache.org/activemq/browse/CAMEL-2211
> 
> 
> On Sun, Nov 22, 2009 at 6:39 AM, Ming Fang <mingfang@mac.com> wrote:
>> Here is the smallest problem that demonstrates the problem.
>> 
>> Java file
>> 
>> package test;
>> 
>> import org.apache.activemq.broker.BrokerService;
>> 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 {
>>        //log4j
>>        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.
>>        simulatorServer("tcp://localhost:61616");
>>        simulatorServer("tcp://localhost:61617");
>>        simulatorServer("tcp://localhost:61618");
>> 
>>        //client
>>        CamelContext camelContext = new DefaultCamelContext();
>>        ActiveMQConfiguration configuration = new ActiveMQConfiguration();
>>        configuration.setBrokerURL("failover://(tcp://localhost:61616,tcp://localhost:61617,tcp://localhost:61618)");
>>        camelContext.addComponent("jms", new ActiveMQComponent(configuration));
>>        camelContext.start();
>> 
>>        //invoke server. likely to fail when sleepTime is over 30 seconds
>>        Echo service = ProxyHelper.createProxy(camelContext.getEndpoint("jms:queue:echo"),
Echo.class);
>>        int sleepTime = 31000;
>>        while (true) {
>>            System.out.println(service.echo("test"));
>>            Thread.sleep(sleepTime);
>>        }
>>    }
>> 
>>    private static void simulatorServer(final String url) throws Exception {
>>        //each server is listening on a dedicated broker
>>        BrokerService broker = new BrokerService();
>>        broker.setUseJmx(false);
>>        broker.setPersistent(false);
>>        broker.addConnector(url);
>>        broker.start();
>> 
>>        ActiveMQConfiguration configuration = new ActiveMQConfiguration();
>>        configuration.setBrokerURL(url);
>>        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;
>>                    }
>>                });
>>            }
>>        });
>>        camelContext.start();
>>    }
>> 
>>    //server interface
>>    public static interface Echo{
>>        String echo(String text);
>>    }
>> }
>> 
>> 
>> Pom file
>> 
>> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
>>    <modelVersion>4.0.0</modelVersion>
>>    <groupId>test</groupId>
>>    <artifactId>jmsproblem</artifactId>
>>    <packaging>jar</packaging>
>>    <version>1.0-SNAPSHOT</version>
>>    <name>jmsproblem</name>
>> 
>>    <dependencies>
>>        <dependency>
>>            <groupId>org.apache.camel</groupId>
>>            <artifactId>camel-core</artifactId>
>>            <version>2.0.0</version>
>>        </dependency>
>>        <dependency>
>>            <groupId>org.apache.camel</groupId>
>>            <artifactId>camel-jms</artifactId>
>>            <version>2.0.0</version>
>>        </dependency>
>>        <dependency>
>>            <groupId>org.apache.activemq</groupId>
>>            <artifactId>activemq-camel</artifactId>
>>            <version>5.3.0</version>
>>        </dependency>
>>    </dependencies>
>> </project>
>> 
>> 
>> On Nov 21, 2009, at 1:26 AM, Claus Ibsen wrote:
>> 
>>> On Sat, Nov 21, 2009 at 7:18 AM, Ming Fang <mingfang@mac.com> 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 producers?
>>>>>>> --Ming
>>>>>> 
>>>>> 
>>>> 
>>>> 
>>> 
>>> 
>>> 
>>> --
>>> Claus Ibsen
>>> Apache Camel Committer
>>> 
>>> Author of Camel in Action: http://www.manning.com/ibsen/
>>> Open Source Integration: http://fusesource.com
>>> Blog: http://davsclaus.blogspot.com/
>>> Twitter: http://twitter.com/davsclaus
>> 
>> 
> 
> 
> 
> -- 
> Claus Ibsen
> Apache Camel Committer
> 
> Author of Camel in Action: http://www.manning.com/ibsen/
> Open Source Integration: http://fusesource.com
> Blog: http://davsclaus.blogspot.com/
> Twitter: http://twitter.com/davsclaus


Mime
View raw message