On the other hand though I didn't use any endpoint configuration before.
Simpy:
<camelContext id="camel"
xmlns="http://activemq.apache.org/camel/schema/spring">
<route>
<from uri="activemq:queue:Input" />
<delayer>
<simple>header.JMSTimestamp</simple>
<to uri="activemq:queue:Delayed" />
<delay>
<methodCall
bean="com.intecbilling.jms.Delayer" method="delay"/>
</delay>
</delayer>
</route>
</camelContext>
But now it's better for me as I can have more configuration options.
Krystian Szczesny wrote:
>
> Well it didn't.
> That's why I had to make the changes.
>
> But now, yes, when using methodCall I am passing the same value all the
> time.
>
>
> RomKal wrote:
>>
>> BTW I think that if you use delayer(3000) and set concurentConsumers=1
>> on JMS endpoint it will work the way you want as delayer simply calls
>> Thread.sleep() as far as I remember.
>>
>> Then every mesasge will be delayed for 3 sec and the second message
>> will wait for the previous one to complete.
>>
>> Roman
>>
>> 2008/5/12 James Strachan <[EMAIL PROTECTED]>:
>>> Awesome! Phew! Thanks for letting us know :)
>>>
>>>
>>>
>>> 2008/5/12 Krystian Szczesny <[EMAIL PROTECTED]>:
>>> >
>>> >
>>> >
>>> >
>>> > James.Strachan wrote:
>>> > >
>>> > > 2008/5/12 Krystian Szczesny <[EMAIL PROTECTED]>:
>>> > >> James.Strachan wrote:
>>> > >> >
>>> > >> > 2008/5/9 Krystian Szczesny
>>> <[EMAIL PROTECTED]>:
>>> > >> >>
>>> > >> >>
>>> > >> >>
>>> > >> >> James.Strachan wrote:
>>> > >> >>>
>>> > >> >>> 2008/5/9 Krystian Szczesny
>>> <[EMAIL PROTECTED]>:
>>> > >> >>>>
>>> > >> >>>> Hi,
>>> > >> >>>>
>>> > >> >>>>
>>> > >> >>>> Before, when delaying single messages I've used for
>>> example
>>> > >> >>>> delayer(3000)
>>> > >> >>>> and it worked flawlessly.
>>> > >> >>>> Now I need to delay a sequence of messages, so when I send
>>> 5
>>> > >> messages,
>>> > >> >>>> the
>>> > >> >>>> first should be delayed by 3000, second by 6000 etc...
>>> > >> >>>>
>>> > >> >>>> Is there any way I could do that with Camel?
>>> > >> >>>
>>> > >> >>> You just need to use an expression for the time that the
>>> message is
>>> > >> to
>>> > >> >>> be sent at. So you could do something like...
>>> > >> >>>
>>> > >> >>> from("activemq:foo").delay().method("someBean",
>>> > >> >>> "sendAtTime").to("activemq:bar");
>>> > >> >>>
>>> > >> >>> then the bean would look like this...
>>> > >> >>>
>>> > >> >>> public class SomeBean {
>>> > >> >>> public long sendAtTime(@Header("MyDelayHeader") long
>>> delay) {
>>> > >> >>> if (delay <= 0) delay = 3000;
>>> > >> >>> return System.currentTimeMillis() + delay;
>>> > >> >>> }
>>> > >> >>> }
>>> > >> >>>
>>> > >> >>> which would look for the MyDelayHeader on the message and
>>> use that
>>> > >> as
>>> > >> >>> the
>>> > >> >>> delay.
>>> > >> >>>
>>> > >> >>>
>>> > >> >>> --
>>> > >> >>> James
>>> > >> >>> -------
>>> > >> >>> http://macstrac.blogspot.com/
>>> > >> >>>
>>> > >> >>> Open Source Integration
>>> > >> >>> http://open.iona.com
>>> > >> >>>
>>> > >> >>>
>>> > >> >> Hi James,
>>> > >> >>
>>> > >> >> thanks for fast answer.
>>> > >> >> One more thing if you could...
>>> > >> >> I am using spring to configure the whole thing:
>>> > >> >>
>>> > >> >> <camelContext id="camel"
>>> > >> >>
>>> > >> xmlns="http://activemq.apache.org/camel/schema/spring">
>>> > >> >> <route>
>>> > >> >> <from uri="activemq:queue:Input" />
>>> > >> >> <delayer>
>>> > >> >>
>>> <simple>header.JMSTimestamp</simple>
>>> > >> >> <to
>>> uri="activemq:queue:Delayed" />
>>> > >> >> <delay>3000</delay>
>>> > >> >> </delayer>
>>> > >> >> </route>
>>> > >> >> </camelContext>
>>> > >> >>
>>> > >> >> How can I add "method("someBean","sendAtTime")" to this
>>> > >> configuration?
>>> > >> >
>>> > >> > <delayer>
>>> > >> > <methodCall bean="something" method="sendAtTime"/>
>>> > >> > ...
>>> > >> > </delayer>
>>> > >> >
>>> > >> > For more details, configure your IDE to use the XSD...
>>> > >> >
>>> http://activemq.apache.org/camel/schema/spring/camel-spring-1.3.0.xsd
>>> > >> >
>>> > >> > then you'll get smart completion
>>> > >> >
>>> > >> > --
>>> > >> > James
>>> > >> > -------
>>> > >> > http://macstrac.blogspot.com/
>>> > >> >
>>> > >> > Open Source Integration
>>> > >> > http://open.iona.com
>>> > >> >
>>> > >> >
>>> > >>
>>> > >> Thx James,
>>> > >>
>>> > >> I've configured Eclipse to use the xsd file, but it does not
>>> support
>>> > >> smart
>>> > >> completion i guess, it shows everything there is. But never mind
>>> that.
>>> > >
>>> > > Strange - works for me in IntellIJ though :)
>>> > >
>>> > >>
>>> > >> I've tried couple of scenarios [delay method returns
>>> > >> System.currentTimeMillis() + 5000]:
>>> > >>
>>> > >> FIRST
>>> > >> <camel:camelContext id="camel">
>>> > >> <camel:route>
>>> > >> <camel:from uri="activemq:queue:Delayed"
>>> />
>>> > >> <camel:delayer>
>>> > >> <camel:methodCall
>>> > >> bean="delayerBean" method="delay"/>
>>> > >> <camel:to
>>> > >> uri="activemq:queue:Output" />
>>> > >> </camel:delayer>
>>> > >> </camel:route>
>>> > >> </camel:camelContext>
>>> > >>
>>> > >> Message is delivered to consumer of Output queue before the
>>> delay method
>>> > >> is
>>> > >> being called.
>>> > >>
>>> > >> SECOND:
>>> > >> <camel:camelContext id="camel">
>>> > >> <camel:route>
>>> > >> <camel:from uri="activemq:queue:Delayed"
>>> />
>>> > >> <camel:delayer>
>>> > >> <camel:methodCall
>>> > >> bean="delayerBean" method="delay"/>
>>> > >> </camel:delayer>
>>> > >> <camel:to uri="activemq:queue:Output" />
>>> > >> </camel:route>
>>> > >> </camel:camelContext>
>>> > >> Result: same as above - message is consumed before the delay
>>> method is
>>> > >> called.
>>> > >>
>>> > >> Then I've tried with a class:
>>> > >> public class CamelRoute extends RouteBuilder {
>>> > >>
>>> > >> @Override
>>> > >> public void configure() throws Exception {
>>> > >>
>>> > >> from("activemq:queue:Delayed").delayer().method("delayerBean",
>>> > >> "delay").to("activemq:queue:Output");
>>> > >> }
>>> > >> }
>>> > >>
>>> > >> and still same result. Message is sent to Output without any
>>> delay :/
>>> > >>
>>> > >> What am I doing wrong?
>>> > >
>>> > > Your code looks valid to me; I guess there's some kinda bug in
>>> there
>>> > > somewhere. Will try take a look soon (I'm in the middle of a big
>>> > > refactor...)
>>> > >
>>> > > --
>>> > > James
>>> > > -------
>>> > > http://macstrac.blogspot.com/
>>> > >
>>> > > Open Source Integration
>>> > > http://open.iona.com
>>> > >
>>> > >
>>> >
>>> >
>>> > James... sorry about that.
>>> > I've spotted the bug just before you've replied.
>>> > I've added a new queue to my configuration and forgot to change the
>>> message
>>> > listener configuration... so onMessage was hitting on wrong queue :/
>>> >
>>> > Sorry again for that, it works like a charm now.
>>> > --
>>> > View this message in context:
>>> http://www.nabble.com/Delay-messages-with-camel-sequentially-tp17144701s22882p17186941.html
>>> >
>>> >
>>> > Sent from the Camel - Users mailing list archive at Nabble.com.
>>> >
>>> >
>>>
>>>
>>>
>>> --
>>>
>>>
>>> James
>>> -------
>>> http://macstrac.blogspot.com/
>>>
>>> Open Source Integration
>>> http://open.iona.com
>>>
>>
>>
>
>
--
View this message in context:
http://www.nabble.com/Delay-messages-with-camel-sequentially-tp17144701s22882p17189797.html
Sent from the Camel - Users mailing list archive at Nabble.com.