camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Christian Müller <christian.muel...@gmail.com>
Subject Re: Problems implementing a delay in a camel route
Date Fri, 27 Jan 2012 15:59:54 GMT
We track this issue with https://issues.apache.org/jira/browse/CAMEL-4947

Thanks for reporting,
Christian

On Thu, Jan 26, 2012 at 1:24 PM, Tom Howe <tommytastic@gmail.com> wrote:

> Hi, can anyone help with this.. specifically computeDelay() method never
> appears to be called..
>
>  <camel:delay>
>              <camel:method ref="retryDelayCompute" method="computeDelay"/>
>               <camel:to ref="endpoint-submit-in" />
>               <camel:log message="Routing to in queue..." />
>     </camel:delay>
>
> We are using camel 2.7.1 and found this post which suggests that the above
> config should work..
>
>
> http://camel.465427.n5.nabble.com/Delayer-and-asyncDelayed-how-to-delay-asynchronously-td3252456.html
>
> It seems to work ok using the java DSL eg
> from(...).delay().method(instance, "method").to(..)
>
> Thanks, Tom
>
>
> On Tue, Jan 24, 2012 at 3:42 PM, Mike Spelling <mike_spelling@hotmail.com
> >wrote:
>
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > I'm using Camel v2.7.1 and trying to configure a route to apply a delay
> to
> > incoming messages before passing them on to another queue. I've read
> about
> > a similar problem at
> > http://osdir.com/ml/users-camel-apache/2010-11/msg00134.html but the
> > answer did not seem to work for me.
> > I don't think I can use  a <camel:constant> in the <camel:delay> block
>  as
> > this would block incoming messages, making new messages have to wait for
> > any previous messages to be routed before having another delay applied.
> The
> > attribute asyncDelayed="true" in the <camel:delay> block appeared to use
> a
> > thread per message to ensure the correct delay was applied which will
> > quickly use up the maxConcurrentConsumers.
> > I therefore wanted to pass the delay block a custom method to calculate
> > for correct delay from the JMSHeader Timestamp.
> >
> >
> >
> >
> >
> >
> >
> >
> > My Camel configuration contains:
> > <?xml version="1.0" encoding="UTF-8"?>
> >
> > <beans xmlns="http://www.springframework.org/schema/beans"
> >
> >    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >
> >   xmlns:camel="http://camel.apache.org/schema/spring"
> >
> >    xsi:schemaLocation="http://www.springframework.org/schema/beans
> > http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
> >
> >        http://camel.apache.org/schema/spring
> > http://camel.apache.org/schema/spring/camel-spring-2.0-M1.xsd">
> >
> >
> >
> >    <bean id="RetryDelayCompute" class="myPackage.RetryDelayCompute" />
> >
> >
> >
> >    <camel:camelContext autoStartup="true">
> >
> >
> >
> >        <camel:endpoint id="endpoint-submit-in"
> > uri="activemq:l2vc.pending?transacted=true" />
> >
> >        <camel:endpoint id="endpoint-submit-retrywait"
> > uri="activemq:l2vc.retrywait" />
> >
> >
> >
> >        <camel:route autoStartup="true" errorHandlerRef="pending.error">
> >            <camel:from ref="endpoint-submit-retrywait" />
> > <camel:log message="Routing from retrywait queue..." />
> >
> >            <camel:delay>
> >
> >               <camel:method ref="RetryDelayCompute"
> method="computeDelay"/>
> >
> >                <camel:to ref="endpoint-submit-in" />
> > <camel:log message="Routing to in queue..." />
> >
> >            </camel:delay>
> >
> >        </camel:route>
> >
> >
> >
> >    </camel:camelContext>
> >
> > </beans>
> > My bean is below:
> >
> >
> > package myPackage;
> > @Componentpublic class RetryDelayCompute {                      final
> > static long TOTAL_DELAY_ON_QUEUE = 11000;         public long
> > computeDelay(@Header("JMSTimestamp") long jmsTimestamp) {
> > System.out.println("Calculating delay...");             long now =
> > System.currentTimeMillis();          long timeOnQueue = now -
> jmsTimestamp;
> >          return TOTAL_DELAY_ON_QUEUE - timeOnQueue;      }}
> > On running tests the method is never called. Although the component is
> > instantiated the logs show that the method never runs. Messages are
> simply
> > routed to the correct queue with no delay.
> > Any help appreciated!
> > Thanks,
> > Mike
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message