<div class="docbook"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">9.5. Closing client connections on unroutable mandatory messages</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="Java-Broker-Runtime-Handling-Undeliverable-Messages.html">Prev</a> </td><th align="center" width="60%">Chapter 9. Runtime</th><td align="right" width="20%"> <a accesskey="n" href="Java-Broker-Runtime-Flow-To-Disk.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Java-Broker-Runtime-Close-Connection-When-No-Route"></a>9.5. Closing client connections on unroutable mandatory messages</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="Java-Broker-Runtime-Close-Connection-When-No-Route-Summary"></a>9.5.1. Summary</h3></div></div></div><p> | |
Due to asynchronous nature of AMQP 0-8/0-9/0-9-1 protocols sending a message with a routing key for which no queue binding exist results | |
in either message being bounced back (if it is mandatory or immediate) or discarded on broker side otherwise. | |
</p><p> | |
When a 'mandatory' message is returned, the Apache Qpid JMS AMQP 0-x clients conveys this by delivering | |
an <span class="emphasis"><em>AMQNoRouteException</em></span> through the configured ExceptionListener on the Connection. | |
This does not cause channel or connection closure, however it requires a special exception handling | |
on client side in order to deal with <span class="emphasis"><em>AMQNoRouteExceptions</em></span>. | |
This could potentially be a problem when using various messaging frameworks (e.g. Mule) | |
as they usually close the connection on receiving any JMSException. | |
</p><p> | |
In order to simplify application handling of scenarios where 'mandatory' messages | |
are being sent to queues which do not actually exist, the Apache Qpid Broker-J can be configured such that | |
it will respond to this situation by closing the connection | |
rather than returning the unroutable message to the client as it normally should. | |
From the application perspective, this will result in failure of synchronous operations in progress such as a session commit() call. | |
</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>This feature affects only transacted sessions.</p><p> | |
By default, the Apache Qpid JMS AMQP 0-x produces mandatory messages when using queue destinations. Topic | |
destinations produce 'non-mandatory' messages. | |
</p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="Java-Broker-Runtime-Close-Connection-When-No-Route-Configuration"></a>9.5.2. Configuring | |
<span class="emphasis"><em>closeWhenNoRoute</em></span> | |
</h3></div></div></div><p> | |
The Port attribute <span class="emphasis"><em>closeWhenNoRoute</em></span> can be set to specify this feature on broker side. | |
By default, it is turned on. Setting <span class="emphasis"><em>closeWhenNoRoute</em></span> to <span class="emphasis"><em>false</em></span> switches | |
it off. | |
</p><p>See the <a class="link" href="../../jms-client-0-8/book/JMS-Client-0-8-Connection-URL.html" target="_top">Qpid JMS AMQP 0-x client | |
documentation</a> for details of enabling this feature client side. | |
</p></div></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="Java-Broker-Runtime-Handling-Undeliverable-Messages.html">Prev</a> </td><td align="center" width="20%"><a accesskey="u" href="Java-Broker-Runtime.html">Up</a></td><td align="right" width="40%"> <a accesskey="n" href="Java-Broker-Runtime-Flow-To-Disk.html">Next</a></td></tr><tr><td align="left" valign="top" width="40%">9.4. Handing Undeliverable Messages </td><td align="center" width="20%"><a accesskey="h" href="Apache-Qpid-Broker-J-Book.html">Home</a></td><td align="right" valign="top" width="40%"> 9.6. Flow to Disk</td></tr></table></div></div> |