On Sun, Nov 22, 2009 at 2:46 PM, Ming Fang <mingf...@mac.com> wrote: > 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. >
You are much welcome to git into this issue and help out. I am afraid its not something we have time to look into in the very short time. Camel 2.1 is pending a release which should be started next week. You are also the first to point out this and Camel is running in production at many companies. If you are looking for help ASAP you may have to resort to professional support. For Camel 2.2 we have a roadmap laid out with 2-3 major areas to have covered. We would like Camel 2.2 to be a "little" release in the sense it wont take 3-4 months to complete, but focusing on those 2-3 areas. And you can use the regular JMS API to implement the failover behavior yourself and still use Camel for the remainder. > 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 <mingf...@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 <mingf...@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 > > -- 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