I figured out what the problem was, and the problem wasn't with Camel, it was me. Was doing something stupid in my web service that was causing the problem. Thanks so much for the quick responses and feedback. Best Regards, Aaron
________________________________ From: Aaron Doyle <a_r_do...@yahoo.com> To: "users@camel.apache.org" <users@camel.apache.org>; Aaron Doyle <a_r_do...@yahoo.com> Sent: Friday, October 7, 2011 12:00 PM Subject: Re: Exception not getting caught and multiple consumers getting the same message my properties values did not display correctly, they are messageQueueURI=tcp://localhost:61616?jms.prefetchPolicy.queuePrefetch=1 loaderServiceURI=spring-ws:http://localhost:8080/LoaderService ________________________________ From: Aaron Doyle <a_r_do...@yahoo.com> To: "users@camel.apache.org" <users@camel.apache.org> Sent: Friday, October 7, 2011 11:55 AM Subject: Re: Exception not getting caught and multiple consumers getting the same message I tried the handleFault=true attribute and that did not enable the exceptions to get caught. The exceptions are caught when running one consumer, as soon as I increase the number of consumers, exceptions are not caught and messages start getting lost. I noticed that all 50 consumers are sharing the same connection, whereas I would think that all consumers get there own connection... Adding a doTry/doCatch around the 'to' section of my route, does catch most of the exceptions but still some messages seem to get lost... Is there any way with 1 consumer that I can process multiple messages asynchronously? Or that I can force each consumer to get its own connection? Has anyone else experienced problems running multiple consumers off a message queue and sending the messages to a spring-ws component? Here is my latest configuration: ** Note below 2 lines from my properites file.tcploaderServiceURIspring-ws:http://localhost:8080/LoaderService=://localhost:61616?jms.prefetchPolicy.queuePrefetch=1 <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="placeholderPrefix" value="${" /> <property name="placeholderSuffix" value="}" /> <property name="locations"> <value>classpath:environment.properties</value> </property> </bean> <bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="${messageQueueURI}" /> </bean> <bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory"> <property name="maxConnections" value="50" /> <property name="maximumActive" value="500" /> <property name="connectionFactory" ref="jmsConnectionFactory" /> </bean> <bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration"> <property name="connectionFactory" ref="pooledConnectionFactory"/> <property name="concurrentConsumers" value="50"/> </bean> <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent"> <property name="configuration" ref="jmsConfig"/> </bean> <camelContext id="camel" handleFault="true" xmlns="http://camel.apache.org/schema/spring"> <endpoint id="loaderService" uri="${loaderServiceURI}" /> <onException> <exception>java.lang.Exception</exception> <redeliveryPolicy redeliveryDelay="1000" maximumRedeliveries="2" /> <handled><constant>true</constant></handled> <to uri="activemq:queue:loadableFailure" /> </onException> <route id="loaderWS"> <from uri="activemq:queue:loadable" /> <to ref="loaderService" /> </route> </camelContext> ________________________________ From: Claus Ibsen <claus.ib...@gmail.com> To: "users@camel.apache.org" <users@camel.apache.org> Sent: Tuesday, October 4, 2011 11:50 AM Subject: Re: Exception not getting caught and multiple consumers getting the same message Could it be the spring-ws client returns a SOAP Fault and not an exception? Camel error handler only reacts upon exceptions. There is a flag you can enable on the route, handleFault=true, that turns SOAP faults into exceptions, and allow Camel error handler to react then. On Mon, Oct 3, 2011 at 2:16 PM, Aaron Doyle <a_r_do...@yahoo.com> wrote: > Hello, > > That did not seem to help fix my problem. If I change my route to the > following, the exception is caught and sent to the loadable failure queue. > > <route id="loaderRoute"> > <from uri="activemq:queue:loadable"> > <doTry> > <to uri="bean:loaderServiceClient?method=invokeService"> > <doCatch> > <to uri="activemq:queue:loadableFailure" /> > </doCatch> > </doTry> > <route> > Is there any way to do a redelivery with the doTry/doCatch? > > Back to the onException problem.... > The problem seems to be specific to a spring ws client. The bean > 'loaderServiceClient' is a spring ws client and the exceptions do not get > handled, if I replace the 'to' uri with > 'spring-ws:http://server.com:8080/service' the exception does not get > handled either. If I replace the 'to' uri with a test pojo where the method > being called explicitly throws an exception, the exceptions are caught and > handled by the onException. Is it possible that there is something in the > Spring WS Client that is eating the exception.... > > Lastly, on the second part of my question from first email, does it seem > possible that I have multiple consumers grabbing the same message off of the > queue to load (which is what is causing the exception to be thrown.) If I > run with 1 consumer, it runs without exceptions. > > -Aaron > From: Claus Ibsen <claus.ib...@gmail.com> > To: users@camel.apache.org; Aaron Doyle <a_r_do...@yahoo.com> > Sent: Monday, October 3, 2011 3:48 AM > Subject: Re: Exception not getting caught and multiple consumers getting the > same message > > Hi > > You need to add <handled><constant>true</constant></handled> to your > <onException> to indicate you are handling this exception. > > > On Sun, Oct 2, 2011 at 2:57 PM, Aaron Doyle <a_r_do...@yahoo.com> wrote: >> Sorry bout that, hopefully this is better. >> >> >> Message body >> >> <beans xmlns=http://www.springframework.org/schema/beans; >> xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance; >> xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd >> http://camel.apache.org/schema/springhttp://camel.apache.org/schema/spring/camel-spring.xsd";> >> >> >> <beanid="propertyConfigurer"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> >> <property name="placeholderPrefix"value="${"> >> <property name="placeholderSuffix"value="}"> >> <property name="locations"> >> <value>classpath:environment.properties<value> >> <property> >> </bean> >> >> <camelContext id="camel"xmlns="http://camel.apache.org/schema/spring"> >> <onException> >> <exception>java.lang.Exception<exception> >> <redeliveryPolicy maximumRedeliveries="2" >> logStackTrace="true" logRetryAttempted="true"> >> <to uri="activemq:queue:loadableFailure"> >> <onException> >> >> <routeid="loaderRoute"> >> <from uri="activemq:queue:loadable"> >> <to uri="bean:loaderServiceClient?method=invokeService"> >> <route> >> <camelContext> >> >> <bean >> id="loaderServiceClient"class="com.tms.relay.ws.loader.client.LoaderServiceClient"> >> >> <bean id="jmsConnectionFactory"c >> lass="org.apache.activemq.ActiveMQConnectionFactory"> >> <property name="brokerURL"value="${messageQueueURI}"> >> <bean> >> >> <bean id="pooledConnectionFactory" >> class="org.apache.activemq.pool.PooledConnectionFactory"> >> <property name="maxConnections" value="50"> >> <property name="maximumActive" value="500"> >> <property name="connectionFactory" ref="jmsConnectionFactory"> >> <bean> >> >> <bean id="jmsConfig" >> class="org.apache.camel.component.jms.JmsConfiguration"> >> <property name="connectionFactory" >> ref="pooledConnectionFactory"> >> <property name="concurrentConsumers" value="50"> >> <bean> >> >> <bean >> id="activemq"class="org.apache.activemq.camel.component.ActiveMQComponent"> >> <property name="configuration" ref="jmsConfig"> >> <bean> >> >> <beans> >> >> >> ________________________________ >> From: Claus Ibsen <claus.ib...@gmail.com> >> To: users@camel.apache.org >> Sent: Sunday, October 2, 2011 3:08 AM >> Subject: Re: Exception not getting caught and multiple consumers getting >> the same message >> >> Hi >> >> Can you post the XML so its readable :) >> >> >> On Sat, Oct 1, 2011 at 6:40 PM, Aaron Doyle <a_r_do...@yahoo.com> wrote: >>> I have a small route that reads from an activemq queue and sends the >>> message to a bean, a service client that calls a web service, and am >>> experiencing a few issues. The onException configuration doesn't seem to >>> get called when the bean throws an exception, and it seems like some of my >>> concurrent consumers are getting the same message off the queue. The queue >>> is preloaded with 500 unique messages, the messages are eventually being >>> loaded to a database, the exception being thrown states that a duplicate key >>> was being inserted, which could only happen if two consumers picked up the >>> same message ( I think ). After all 500 messages are processed, I end up >>> with ~495 in the database and 5 missing (not on the failure queue defined by >>> the onException. >>> >>> I am using ActiveMQ 5.4.1, Camel 2.8.1, Java 1.6.25, Spring 3.0.5 and >>> Spring WS 2.0.1. >>> >>> Here is my configuration: >>> >>> *Note: I am able to catch the exception if I explicitly put a doTry and >>> doCatch around the to endpoint in my route. Also, everything works and >>> loads into my db fine if I use 1 or 2 consumers. >>> >>> >>> <beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"http://www.springframework.org/schema/beans >>> http://www.springframework.org/schema/beans/spring-beans.xsd >>> http://camel.apache.org/schema/spring >>> >> >> http://camel.apache.org/schema/spring/camel-spring.xsd"xsi:schemaLocation="> >> >> <beanid="propertyConfigurer"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><propertyname="placeholderPrefix"value="${"/><propertyname="placeholderSuffix"value="}"/> <camelContextid="camel"xmlns="http://camel.apache.org/schema/spring"> <onException> <exception>java.lang.Exception</exception> <redeliveryPolicymaximumRedeliveries="2"logStackTrace="true"logRetryAttempted="true"/> <touri="activemq:queue:loadableFailure"/> <routeid="loaderRoute"> <fromuri="activemq:queue:loadable"/> <touri="bean:loaderServiceClient?method=invokeService"/> </route> <beanid="jmsConnectionFactory"class="org.apache.activemq.ActiveMQConnectionFactory"> <propertyname="brokerURL"value="${messageQueueURI}"/> <beanid="pooledConnectionFactory"cl >> ass="org.apache.activem >>> >>> q.pool.PooledConnectionFactory"> <propertyname="maxConnections"value="50"/> <propertyname="maximumActive"value="500"/> <propertyname="connectionFactory"ref="jmsConnectionFactory"/> <beanid="jmsConfig"class="org.apache.camel.component.jms.JmsConfiguration"> <propertyname="connectionFactory"ref="pooledConnectionFactory"/> <propertyname="concurrentConsumers"value="50"/> <beanid="activemq"class="org.apache.activemq.camel.component.ActiveMQComponent"> </beans> <propertyname="configuration"ref="jmsConfig"/></bean></bean></bean></bean><beanid="loaderServiceClient"class="com.tms.relay.ws.loader.client.LoaderServiceClient"/></camelContext> </onException><propertyname="locations"><va >>> lue>classpath:environment.properties</value></property></bean> >> >> >> >> -- >> Claus Ibsen >> ----------------- >> FuseSource >> Email: cib...@fusesource.com >> Web: http://fusesource.com >> Twitter: davsclaus, fusenews >> Blog: http://davsclaus.blogspot.com/ >> Author of Camel in Action: http://www.manning.com/ibsen/ > > > > -- > Claus Ibsen > ----------------- > FuseSource > Email: cib...@fusesource.com > Web: http://fusesource.com > Twitter: davsclaus, fusenews > Blog: http://davsclaus.blogspot.com/ > Author of Camel in Action: http://www.manning.com/ibsen/ > > > -- Claus Ibsen ----------------- FuseSource Email: cib...@fusesource.com Web: http://fusesource.com Twitter: davsclaus, fusenews Blog: http://davsclaus.blogspot.com/ Author of Camel in Action: http://www.manning.com/ibsen/ messageQueueURI=