Managed to get it working:<div><br></div><div>* passed in my own <font face="courier new, monospace">ExecutorService</font> when creating the connection and stored it in the <font face="courier new, monospace">ServletContextListener</font></div><div>* Used <font face="courier new, monospace">Executors.newCachedThreadPool();</font> -&gt; not necessary, but is good as many short executions, and unused threads die after 60s idle time</div><div>* Shutdown threads in<font face="courier new, monospace">&nbsp;ServletContextListener.destroyed()</font>. First thought this didn't work as my breakpoint was not reached, but somehow, breakpoint just seem not to work there (could make sense when I think about it, I'm stopping the process so debugger might already be detached). But logging assures me now my code is executed.</div><div><font face="courier new, monospace">ServletContextListener.destroyed() {</font></div><div><div><font face="courier new, monospace">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; executorService.shutdown();<br></font></div><div><font face="courier new, monospace">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; executorService.awaitTermination(20, TimeUnit.SECONDS);</font></div><div><font face="courier new, monospace">}</font></div><div><br></div><div>And that's it :)</div><div><br></div>Op woensdag 24 juli 2013 17:08:32 UTC+2 schreef steven....@i-develop.be het volgende:<blockquote class="gmail_quote" style="margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;">I'm trying to setup RabbitMQ RPC in a web project (like suggested in <a href="http://www.rabbitmq.com/tutorials/tutorial-six-java.html" target="_blank">tutorial 6</a>). It works as intended, but when I try to shutdown Tomcat, the shutdown hangs as soon as I have created a consumer listening to the rpc response.&nbsp;<div><br></div><div>jstack and some debugging learned me that for each created consumer, a thread is created. And those threads are preventing Tomcat from shutting down (as they are not managed by Tomcat).</div><div><br></div><div>Looking at <font face="courier new, monospace">ConsumerWorkService</font>, there is a method <font face="courier new, monospace">addWork</font>, which creates a new <font face="courier new, monospace">WorkPoolRunnable</font> and if I have understood it correctly, those Runnable's are only stopped when the 'key', being the channel is stopped.</div><div><br></div><div>I find that a bit odd.. I would expect that when I call&nbsp;<font face="courier new, monospace">stub.channel.basicCancel(<wbr>consumer.getConsumerTag()); </font><font face="arial, sans-serif">the runnable for the consumer is removed.&nbsp;</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">Or am I completely&nbsp;wrong about my findings and is something else going on?</font></div></blockquote></div>