Here is my full route:
from("jetty:http://0.0.0.0:8686/hello") .process(new Processor() { public void process(Exchange exchange) throws Exception { String body = exchange.getIn().getBody(String.class); Integer ii = Integer.parseInt(body); System.out.println("About to process: " + ii); System.out.println("Sending to numbers2 queue to wait..."); exchange.getOut().setBody(ii); } }) .to("jms:queue:numbers2?requestTimeout=50000") .process(new Processor() { public void process(Exchange exchange) throws Exception { Integer ii = exchange.getIn().getBody(Integer.class); System.out.println("Back to processing of: " + ii); exchange.getOut().setBody(ii); } }) .to("multiplier"); The other queue (jms:queue:numbers2) is a part of another route (in another Camel context): from("jms:queue:numbers2") .process(new Processor() { public void process(Exchange exchange) throws Exception { int sleepTime = (int)(Math.random()*25000); System.out.println("Received from numbers2....Going to sleep now for " + sleepTime/1000 + " seconds"); Thread.sleep(sleepTime); Message in = exchange.getIn(); exchange.getOut().setBody(in.getBody()); } }); I initiate the shutdown on the first Camel Context via JMX. If I remove the http component, and only use JMS components, the shutdown works just fine. With all the INFO messages about waiting for inflight exchanges to finish printed. As soon as I add Jetty, and initiate a stop() call, I'm getting the following output in the logs: Back to processing of: 1 About to process: 2 Sending to numbers2 queue to wait... Back to processing of: 2 About to process: 3 Sending to numbers2 queue to wait... Back to processing of: 2 About to process: 3 Sending to numbers2 queue to wait... [CP Connection(4)-10.58.123.154] DefaultCamelContext INFO Apache Camel 2.2.0 (CamelContext:camel) is stopping [CP Connection(4)-10.58.123.154] DefaultShutdownStrategy INFO Starting to graceful shutdown routes (timeout 300 seconds) [ 6718...@qtp-21758581-2] DefaultErrorHandler ERROR Failed delivery for exchangeId: b5e983a8-4777-4db5-997c-3e4daf17c13e. On delivery attempt: 0 caught: org.apache.camel.ExchangeTimedOutException: The OUT message was not received within: 50000 millis. Exchange[Message: 1] [ 16889...@qtp-21758581-5] DefaultErrorHandler ERROR Failed delivery for exchangeId: b6653535-c32c-49c6-af6f-89fc0d58bbcf. Exhausted after delivery attempt: 1 caught: org.apache.camel.ExchangeTimedOutException: The OUT message was not received within: 50000 millis. Exchange[Message: 2] org.apache.camel.ExchangeTimedOutException: The OUT message was not received within: 50000 millis. Exchange[Message: 2] at org.apache.camel.component.jms.JmsProducer.processInOut(JmsProducer.java:265) at org.apache.camel.component.jms.JmsProducer.process(JmsProducer.java:147) at org.apache.camel.processor.SendProcessor$1.doInProducer(SendProcessor.java:97) at org.apache.camel.processor.SendProcessor$1.doInProducer(SendProcessor.java:95) at org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:146) at org.apache.camel.processor.SendProcessor.doProcess(SendProcessor.java:94) at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:82) at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:67) at org.apache.camel.processor.DelegateProcessor.processNext(DelegateProcessor.java:53) at org.apache.camel.processor.DelegateProcessor.proceed(DelegateProcessor.java:82) at org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:93) at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:67) at org.apache.camel.processor.RedeliveryErrorHandler.processExchange(RedeliveryErrorHandler.java:177) at org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:143) at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:88) at org.apache.camel.processor.DefaultErrorHandler.process(DefaultErrorHandler.java:49) at org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:228) at org.apache.camel.processor.Pipeline.process(Pipeline.java:74) at org.apache.camel.processor.UnitOfWorkProcessor.processNext(UnitOfWorkProcessor.java:66) at org.apache.camel.processor.DelegateProcessor.process(DelegateProcessor.java:48) at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:67) at org.apache.camel.component.http.CamelServlet.service(CamelServlet.java:53) at javax.servlet.http.HttpServlet.service(HttpServlet.java:690) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:326) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:938) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) [ 19538...@qtp-21758581-4] DefaultErrorHandler ERROR Failed delivery for exchangeId: c5090377-e834-4b79-9b47-2512080c0632. Exhausted after delivery attempt: 1 caught: org.apache.camel.ExchangeTimedOutException: The OUT message was not received within: 50000 millis. Exchange[Message: 3] org.apache.camel.ExchangeTimedOutException: The OUT message was not received within: 50000 millis. Exchange[Message: 3] at org.apache.camel.component.jms.JmsProducer.processInOut(JmsProducer.java:265) at org.apache.camel.component.jms.JmsProducer.process(JmsProducer.java:147) at org.apache.camel.processor.SendProcessor$1.doInProducer(SendProcessor.java:97) at org.apache.camel.processor.SendProcessor$1.doInProducer(SendProcessor.java:95) at org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:146) at org.apache.camel.processor.SendProcessor.doProcess(SendProcessor.java:94) at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:82) at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:67) at org.apache.camel.processor.DelegateProcessor.processNext(DelegateProcessor.java:53) at org.apache.camel.processor.DelegateProcessor.proceed(DelegateProcessor.java:82) at org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:93) at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:67) at org.apache.camel.processor.RedeliveryErrorHandler.processExchange(RedeliveryErrorHandler.java:177) at org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:143) at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:88) at org.apache.camel.processor.DefaultErrorHandler.process(DefaultErrorHandler.java:49) at org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:228) at org.apache.camel.processor.Pipeline.process(Pipeline.java:74) at org.apache.camel.processor.UnitOfWorkProcessor.processNext(UnitOfWorkProcessor.java:66) at org.apache.camel.processor.DelegateProcessor.process(DelegateProcessor.java:48) at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:67) at org.apache.camel.component.http.CamelServlet.service(CamelServlet.java:53) at javax.servlet.http.HttpServlet.service(HttpServlet.java:690) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:326) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:938) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) [ Camel thread 11: ShutdownTask] DefaultShutdownStrategy INFO Route: route1 shutdown complete. [CP Connection(4)-10.58.123.154] DefaultShutdownStrategy INFO Graceful shutdown of routes completed in 0 seconds [CP Connection(4)-10.58.123.154] DefaultInflightRepository INFO Shutting down with no inflight exchanges. [CP Connection(4)-10.58.123.154] DefaultCamelContext INFO Apache Camel 2.2.0 (CamelContext:camel) stopped I tried to fix this by extending JettyHttpComponent and overriding createServer method as follows: @Override protected Server createServer() throws Exception { Server server = super.createServer(); server.setGracefulShutdown(50000); server.setStopAtShutdown(true); return server; } This seemed to work, but I'm not sure if that's the right approach. Any help is greatly appreciated. Thanks, Ilya. On Thu, Apr 15, 2010 at 2:17 AM, Claus Ibsen <claus.ib...@gmail.com> wrote: > Hi > > All the unit tests run with graceful shutdown by default, and all unit > tests with camel-jetty shut down with no issues. > > The in flight repository do keep track of all in flights. I can only > think of if you use the aggregator or some custom code which > can cause the exchange to be completed in Camels point of view. > > Can you post your entire route? > > And as always report which version of Camel you are using? And try > with the latest stable and even with 2.3-SNAPSHOT. > > > On Wed, Apr 14, 2010 at 7:41 PM, Ilya S <devmailboxl...@gmail.com> wrote: >> Hi All, >> >> Fist of all, thank you for this great product! >> Every new release brings excellent new features just in time. >> >> I'm currently investigating Graceful Shutdown feature, and I'm am >> wondering if graceful shutdown is supported for Camel-Jetty component? >> I was able to successfully shut down JMS component. However, >> JettyHttpCoponent seems to have issues when shutting down. >> >> In my simple test (adopted from camel-example-spring-jms:ServerRoute >> example) I have a simple route that looks like this: >> >> from("jetty:http://0.0.0.0:8686/hello") >> .. >> .. do work >> ... >> .to("jms:queue:numbers2?requestTimeout=50000") >> .to("multiplier"); >> >> >> My producers simply send numbers to http endpoint.. >> >> >> When I shutdown this context gracefully I'm getting all sort of >> exceptions from Jetty, and the context does not seem to wait until >> inflight exchanges have finished. >> I'm using the defaults everywhere (e.g. default shutdown strategy). >> >> Is shutdown supported for Jetty, and if so how should one configure >> jetty to initiate proper shutdown? >> >> Thank you, >> >> Ilya. >> > > > > -- > Claus Ibsen > Apache Camel Committer > > Author of Camel in Action: http://www.manning.com/ibsen/ > Open Source Integration: http://fusesource.com > Blog: http://davsclaus.blogspot.com/ > Twitter: http://twitter.com/davsclaus >