Hi,<div><br></div><div>I&#39;m using the rabbit java client and rabbitmq server for some simple messaging and I can&#39;t seem to get the shutdown listener to work as expected.</div><div><br></div><div>Basically, I&#39;m attaching a shutdownlistener to the connection and then start sending messages every second. If I shutdown the server I would expect the shutdownlistener to be invoked at some point on the client but this never occurs. I only get an&nbsp;AlreadyClosedException when calling basicPublish on the channel.</div>
<div><br></div><div>Test case:</div><div><br></div><div><div>package foobar;</div><div><br></div><div>import com.rabbitmq.client.*;</div><div><br></div><div>import java.io.IOException;</div><div><br></div><div><br></div><div>
public class TestRabbitShutdownListener implements ShutdownListener, Runnable</div><div>{</div><div>&nbsp;&nbsp; private Connection connection;</div><div>&nbsp;&nbsp; private Channel channel;</div><div>&nbsp;&nbsp; private String exchange;</div><div>&nbsp;&nbsp; private int ticket;</div>
<div><br></div><div>&nbsp;&nbsp; public static void main(String[] args) throws IOException, InterruptedException</div><div>&nbsp;&nbsp; {</div><div>&nbsp;&nbsp; &nbsp; &nbsp;ConnectionParameters cp = new ConnectionParameters();</div><div>&nbsp;&nbsp; &nbsp; &nbsp;cp.setUsername(&quot;guest&quot;);</div>
<div>&nbsp;&nbsp; &nbsp; &nbsp;cp.setPassword(&quot;guest&quot;);</div><div><br></div><div>&nbsp;&nbsp; &nbsp; &nbsp;ConnectionFactory cf = new ConnectionFactory(cp);</div><div><br></div><div>&nbsp;&nbsp; &nbsp; &nbsp;TestRabbitShutdownListener trsl = new TestRabbitShutdownListener(</div>
<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cf,</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&quot;foobar&quot;</div><div>&nbsp;&nbsp; &nbsp; &nbsp;);</div><div><br></div><div>&nbsp;&nbsp; &nbsp; &nbsp;Thread t = new Thread(trsl);</div><div>&nbsp;&nbsp; &nbsp; &nbsp;t.start();</div><div>&nbsp;&nbsp; &nbsp; &nbsp;t.join();</div><div>&nbsp;&nbsp; &nbsp; &nbsp;Thread.sleep(5000);</div>
<div><br></div><div>&nbsp;&nbsp; }</div><div><br></div><div>&nbsp;&nbsp; public TestRabbitShutdownListener(ConnectionFactory connectionFactory,</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; String exchange) throws IOException</div><div>&nbsp;&nbsp; {</div>
<div>&nbsp;&nbsp; &nbsp; &nbsp;this.exchange = exchange;</div><div>&nbsp;&nbsp; &nbsp; &nbsp;this.connection = connectionFactory.newConnection(&quot;localhost&quot;);</div><div>&nbsp;&nbsp; &nbsp; &nbsp;this.connection.addShutdownListener(this);</div><div><br></div><div>&nbsp;&nbsp; &nbsp; &nbsp;setupChannel();</div>
<div>&nbsp;&nbsp; }</div><div><br></div><div>&nbsp;&nbsp; private void setupChannel() throws IOException</div><div>&nbsp;&nbsp; {</div><div>&nbsp;&nbsp; &nbsp; &nbsp;this.channel = connection.createChannel();</div><div>&nbsp;&nbsp; &nbsp; &nbsp;this.ticket = channel.accessRequest(&quot;/data&quot;);</div>
<div><br></div><div>&nbsp;&nbsp; &nbsp; &nbsp;channel.exchangeDeclare(</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ticket,</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;exchange,</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&quot;fanout&quot;</div><div>&nbsp;&nbsp; &nbsp; &nbsp;);</div><div>&nbsp;&nbsp; }</div><div><br></div><div>&nbsp;&nbsp; public void run()</div>
<div>&nbsp;&nbsp; {</div><div>&nbsp;&nbsp; &nbsp; &nbsp;while (true)</div><div>&nbsp;&nbsp; &nbsp; &nbsp;{</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; try</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;System.out.println(&quot;Sending msg..&quot;);</div><div><br></div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;channel.basicPublish(ticket, exchange, &quot;&quot;, MessageProperties.BASIC, new byte[]{});</div>
<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Thread.sleep(1000);</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; catch (IOException e)</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;e.printStackTrace();</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return;</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; }</div><div>
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; catch (InterruptedException e)</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;System.out.println(&quot;thread interrupted&quot;);</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return;</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp;&nbsp; &nbsp; &nbsp;}</div><div>&nbsp;&nbsp; }</div>
<div><br></div><div>&nbsp;&nbsp; public void shutdownCompleted(ShutdownSignalException e)</div><div>&nbsp;&nbsp; {</div><div>&nbsp;&nbsp; &nbsp; &nbsp;System.out.println(&quot;shutdownCompleted: &quot; + e.getMessage());</div><div>&nbsp;&nbsp; &nbsp; &nbsp;e.printStackTrace();</div>
<div>&nbsp;&nbsp; }</div><div>}</div><div><br></div></div><div><div><br>-- <br>.henric.larsson.<br>
</div></div>