2009/3/25 Claus Ibsen <claus.ib...@gmail.com>:
> On Wed, Mar 25, 2009 at 10:02 AM, James Strachan
> <james.strac...@gmail.com> wrote:
>> We maybe need to introduce some clean shutdown mechanism into
>> consumers; so we can tell all the consumers we're about to shutdown;
>> then they can gracefully stop processing the current route's message -
>> then we actually stop the consumers (then the endpoints & components
>> etc). Stopping routes midway through (eg cancelling timers) could lead
>> to other kinds of warning messages. I guess the downside of this could
>> make shutdown take a while to complete - also if routes invoke other
>> routes you still could have issues where one route wants to send to
>> another route which is now closed.
>>
>> So its always gonna be pretty hard to shut down Camel cleanly without
>> any error messages at all. Maybe we just hide error messages once
>> shutdown starts? :)
>>
>>
>> On 25/03/2009, Claus Ibsen <claus.ib...@gmail.com> wrote:
>>> On Tue, Mar 24, 2009 at 3:42 PM, Markus Reil <gistenju...@gmx.de> wrote:
>>>>
>>>> Hi,
>>>>
>>>> thanks for your help.
>>>> But I am still experiencing the same problem. The sleep does not get
>>>> interrupted (2.0-M1).
>>>> Do you have any idea why this happens? Let me know if you need more
>>>> information.
>>> Can you show the complete route? And point out where the message is
>>> when you shutdown.
> Yeah I have given that some thoughts as well.
>
> I have wondered if we should support several shutdown strategies
> - shutdown now
> - shutdown
> - shutdown graceful
>
> Shutdown now, is a kinda abrubt shutdown.
>
> Shutdown is a kinda default shutdown as we do now
>
> And graceful:
> - Should deny any new incoming messages.
> - Schedulers should stop triggering
> - Exchanges in transit should allow to complete
> - And if Camel had a kinda of global state that could monitor if there
> were any ongoing exchanges. And thus wait until they completes before
> stopping all the routes.
>
> This global state monitor could however be a hot spot for really high
> performance. But I guess smart people have figured out great
> solutions.
>
> And this global monitor can be used in web console to see which in
> transit exchanges current exists.

Agreed. Right now DefaultCamelContext has isStopped() and isStopping()
methods which consumers could look for; maybe we need to expose some
public method which returns true if a consumer should continue
processing (and if it returns false then they should gracefully shut
down).

e.g. we add some method like this to CamelContext API

/** Returns true if a consumer can continue processing or false if it
should gracefully stop */
boolean isConsumeAllowed();


Things like Guice/Spring have lifecycle support so will shut down the
CamelContext and any related services; so maybe we just need some
gracefulShutdown flag we can enable - which causes the doStop() in
DefaultCamelContext to wait for all the consumers to be stopped before
closing any endpoints/producers/services? To implement this we might
need to register all consumers in the CamelContext until they are
stopped maybe...

-- 
James
-------
http://macstrac.blogspot.com/

Open Source Integration
http://fusesource.com/

Reply via email to