In the regard if using stream:in, we could look at maybe using
System.console() to read via the console instead. It may be better
able to shutdown.



On Fri, Jul 28, 2017 at 10:24 AM, Claus Ibsen <[email protected]> wrote:
> Hi
>
> The stream consumer is stopped via a
> java.util.concurrent.ExecutorService#shutdownNow
>
> If you read its javadoc it says
>
> * <p>There are no guarantees beyond best-effort attempts to stop
> * processing actively executing tasks.  For example, typical
> * implementations will cancel via {@link Thread#interrupt}, so any
> * task that fails to respond to interrupts may never terminate.
>
> I am not sure why the JDK thread pool cannot interrupt that readLine thread.
>
> On Fri, Jul 28, 2017 at 6:12 AM, gludington <[email protected]> wrote:
>> When I attempt to shutdown a camel context, the main thread stays open,
>> seemingly parked on the consumer.  For example, using a small variation on
>> the console sample (at end of message), which uses stream:in and stream:out,
>> I can start up a context, either using a SpringCamelContext or using
>> org.apache.camel.spring.Main.  However, when I stop the context using
>> camelContext.stop() in a separate thread, the context stops, but not
>> everything is released.  In the log, I will see all the messages, concluding
>> with:
>>
>> 23:52:14.711 [pool-2-thread-1] INFO
>> org.apache.camel.spring.SpringCamelContext - Apache Camel 2.19.0
>> (CamelContext: camel-1) uptime 42.866 seconds
>> 23:52:14.713 [pool-2-thread-1] INFO
>> org.apache.camel.spring.SpringCamelContext - Apache Camel 2.19.0
>> (CamelContext: camel-1) is shutdown in 27.621 seconds
>>
>> Stepping through the debugger I can see that StreamConsumer#doStop is
>> called, but a thread dump shows the camel-1 thread is still parked on
>> reading a line
>>           at
>> org.apache.camel.component.stream.StreamConsumer.readFromStream(StreamConsumer.java:171)
>>           at
>> org.apache.camel.component.stream.StreamConsumer.run(StreamConsumer.java:99)
>>           at
>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>>           at
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>>
>> I saw similar behavior with a file consumer, as well.  Is there a proper way
>> to shut down all consumers as well when shutting down a camel context, so
>> that I can kill a specific spring context and release all resources without
>> shutting down the entire application?
>>
>> The context in question:
>> <camelContext xmlns="http://camel.apache.org/schema/spring";>
>>         <route>
>>
>>         <from uri="stream:in?promptMessage=Enter something: "/>
>>         <choice>
>>                 <when>
>>                 <simple>${body} == 'cash'</simple>
>>                 <log message="I HAVE CASH" loggingLevel="INFO"
>> logName="Test"/>
>>             </when>
>>             <when>
>>                 <simple>${body} == 'credit'</simple>
>>                                 <log message="GIVE ME CREDIT" 
>> loggingLevel="INFO" logName="Test"/>
>>             </when>
>>             <otherwise>
>>                 <log message="Excuse me, WHAT IS ${body}"
>> loggingLevel="INFO" logName="Test"/>
>>             </otherwise>
>>         </choice>
>>
>>
>>     <to uri="stream:out"/>
>>         </route>
>>     </camelContext>
>>
>> Thanks,
>> Greg
>>
>>
>>
>> --
>> View this message in context: 
>> http://camel.465427.n5.nabble.com/Shutting-down-camel-and-consumers-tp5808223.html
>> Sent from the Camel - Users mailing list archive at Nabble.com.
>
>
>
> --
> Claus Ibsen
> -----------------
> http://davsclaus.com @davsclaus
> Camel in Action 2: https://www.manning.com/ibsen2



-- 
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2

Reply via email to