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 <[email protected]> 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 <[email protected]> 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
