You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Keith Freeman <8f...@gmail.com> on 2013/10/26 21:22:34 UTC

any way to turn off a timer?

I have a route with 2 sources, a timer and a seda queue.  It uses the 
timer to poll a data source while it's getting data from the queue, and 
processes all of  the data identically later in the route.  But after a 
while, the polled data source is exhausted while the seda queue (and the 
route) will continue to run more-or-less forever.

So once I recognize that the polled data source is exhausted, I'd like 
to turn off the timer so I don't have to start ignoring the polls from 
it.  I realize I might be able to use 2 separate routes and just stop 
the timer route when it's done, but having only 1 route fits my design 
much better.

So is there any way to turn off the timer?  (BTW I don't know the number 
of polls in advance, otherwise I know I could use the repeatCount parameter)

Re: any way to turn off a timer?

Posted by Keith Freeman <8f...@gmail.com>.
For anybody who finds this thread, here's how I got it working:

1) get a reference to the TimerEndpoint for the timer -- you can get 
this from the first Exchange (e.g. 
ex.getFromEndpoint().getEndpointUri().startsWith("timer")), or from the 
RouteDefinition (rd.getInputs(), find the FromDefinition where 
getUri().startsWith("timer")), or maybe from the CamelContext
2) when you've finished handling timer polls, call 
TimerEndpoint.getTimer().cancel()

Note you could also purge() or even reschedule the timer from the 
getTimer() interface (which is a standard Java Timer).

On 10/28/2013 08:45 AM, Claus Ibsen wrote:
> Its not as easy but you would have use the camel api from camel
> context to get hold of the timer consumer and stop it manually.
>
>
>
> On Mon, Oct 28, 2013 at 3:21 PM, Keith Freeman <8f...@gmail.com> wrote:
>> Thanks, but that won't work because it's a single route with 2 inputs: a
>> timer and a seda queue.  So if I stop the route, I won't get the seda
>> messages any more.
>>
>>
>> On 10/28/2013 01:21 AM, Willem jiang wrote:
>>> I think the best way to turn off the timer is to stop the timer route.
>>> As you just send the message to sera queue so the timer route is decoupled
>>> with the seda consumer route.
>>>
>>>
>>> --
>>> Willem Jiang
>>>
>>> Red Hat, Inc.
>>> Web: http://www.redhat.com
>>> Blog: http://willemjiang.blogspot.com (http://willemjiang.blogspot.com/)
>>> (English)
>>>             http://jnn.iteye.com (http://jnn.javaeye.com/) (Chinese)
>>> Twitter: willemjiang
>>> Weibo: 姜宁willem
>>>
>>>
>>>
>>>
>>>
>>> On Sunday, October 27, 2013 at 3:22 AM, Keith Freeman wrote:
>>>
>>>> I have a route with 2 sources, a timer and a seda queue. It uses the
>>>> timer to poll a data source while it's getting data from the queue, and
>>>> processes all of the data identically later in the route. But after a
>>>> while, the polled data source is exhausted while the seda queue (and the
>>>> route) will continue to run more-or-less forever.
>>>>    So once I recognize that the polled data source is exhausted, I'd like
>>>> to turn off the timer so I don't have to start ignoring the polls from
>>>> it. I realize I might be able to use 2 separate routes and just stop
>>>> the timer route when it's done, but having only 1 route fits my design
>>>> much better.
>>>>    So is there any way to turn off the timer? (BTW I don't know the number
>>>> of polls in advance, otherwise I know I could use the repeatCount
>>>> parameter)
>>>
>>>
>
>


Re: any way to turn off a timer?

Posted by Claus Ibsen <cl...@gmail.com>.
Its not as easy but you would have use the camel api from camel
context to get hold of the timer consumer and stop it manually.



On Mon, Oct 28, 2013 at 3:21 PM, Keith Freeman <8f...@gmail.com> wrote:
> Thanks, but that won't work because it's a single route with 2 inputs: a
> timer and a seda queue.  So if I stop the route, I won't get the seda
> messages any more.
>
>
> On 10/28/2013 01:21 AM, Willem jiang wrote:
>>
>> I think the best way to turn off the timer is to stop the timer route.
>> As you just send the message to sera queue so the timer route is decoupled
>> with the seda consumer route.
>>
>>
>> --
>> Willem Jiang
>>
>> Red Hat, Inc.
>> Web: http://www.redhat.com
>> Blog: http://willemjiang.blogspot.com (http://willemjiang.blogspot.com/)
>> (English)
>>            http://jnn.iteye.com (http://jnn.javaeye.com/) (Chinese)
>> Twitter: willemjiang
>> Weibo: 姜宁willem
>>
>>
>>
>>
>>
>> On Sunday, October 27, 2013 at 3:22 AM, Keith Freeman wrote:
>>
>>> I have a route with 2 sources, a timer and a seda queue. It uses the
>>> timer to poll a data source while it's getting data from the queue, and
>>> processes all of the data identically later in the route. But after a
>>> while, the polled data source is exhausted while the seda queue (and the
>>> route) will continue to run more-or-less forever.
>>>   So once I recognize that the polled data source is exhausted, I'd like
>>> to turn off the timer so I don't have to start ignoring the polls from
>>> it. I realize I might be able to use 2 separate routes and just stop
>>> the timer route when it's done, but having only 1 route fits my design
>>> much better.
>>>   So is there any way to turn off the timer? (BTW I don't know the number
>>> of polls in advance, otherwise I know I could use the repeatCount
>>> parameter)
>>
>>
>>
>



-- 
Claus Ibsen
-----------------
Red Hat, Inc.
Email: cibsen@redhat.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen

Re: any way to turn off a timer?

Posted by Keith Freeman <8f...@gmail.com>.
Thanks, but that won't work because it's a single route with 2 inputs: a 
timer and a seda queue.  So if I stop the route, I won't get the seda 
messages any more.

On 10/28/2013 01:21 AM, Willem jiang wrote:
> I think the best way to turn off the timer is to stop the timer route.
> As you just send the message to sera queue so the timer route is decoupled with the seda consumer route.
>
>
> --
> Willem Jiang
>
> Red Hat, Inc.
> Web: http://www.redhat.com
> Blog: http://willemjiang.blogspot.com (http://willemjiang.blogspot.com/) (English)
>            http://jnn.iteye.com (http://jnn.javaeye.com/) (Chinese)
> Twitter: willemjiang
> Weibo: 姜宁willem
>
>
>
>
>
> On Sunday, October 27, 2013 at 3:22 AM, Keith Freeman wrote:
>
>> I have a route with 2 sources, a timer and a seda queue. It uses the
>> timer to poll a data source while it's getting data from the queue, and
>> processes all of the data identically later in the route. But after a
>> while, the polled data source is exhausted while the seda queue (and the
>> route) will continue to run more-or-less forever.
>>   
>> So once I recognize that the polled data source is exhausted, I'd like
>> to turn off the timer so I don't have to start ignoring the polls from
>> it. I realize I might be able to use 2 separate routes and just stop
>> the timer route when it's done, but having only 1 route fits my design
>> much better.
>>   
>> So is there any way to turn off the timer? (BTW I don't know the number
>> of polls in advance, otherwise I know I could use the repeatCount parameter)
>
>


Re: any way to turn off a timer?

Posted by Willem jiang <wi...@gmail.com>.
I think the best way to turn off the timer is to stop the timer route.
As you just send the message to sera queue so the timer route is decoupled with the seda consumer route.


--  
Willem Jiang

Red Hat, Inc.
Web: http://www.redhat.com
Blog: http://willemjiang.blogspot.com (http://willemjiang.blogspot.com/) (English)
          http://jnn.iteye.com (http://jnn.javaeye.com/) (Chinese)
Twitter: willemjiang  
Weibo: 姜宁willem





On Sunday, October 27, 2013 at 3:22 AM, Keith Freeman wrote:

> I have a route with 2 sources, a timer and a seda queue. It uses the  
> timer to poll a data source while it's getting data from the queue, and  
> processes all of the data identically later in the route. But after a  
> while, the polled data source is exhausted while the seda queue (and the  
> route) will continue to run more-or-less forever.
>  
> So once I recognize that the polled data source is exhausted, I'd like  
> to turn off the timer so I don't have to start ignoring the polls from  
> it. I realize I might be able to use 2 separate routes and just stop  
> the timer route when it's done, but having only 1 route fits my design  
> much better.
>  
> So is there any way to turn off the timer? (BTW I don't know the number  
> of polls in advance, otherwise I know I could use the repeatCount parameter)