[rabbitmq-discuss] JAVA client / non daemon threads / shutdown hook

Bartłomiej Prokop prokop.bart at gmail.com
Fri May 18 16:27:24 BST 2012


I'm using JAVA client for RabbitMQ (com.rabbitmq:amqp-client:2.8.1) to
write a "jar component" capable of sending messages for some legacy system.
The idea is to wrap all code that maintain the connection inside my
component. This way, the client software deals only with very simple
methods like "post" and is not aware of any connection handling. The
connect/reconnect code is written and hidden from the legacy system.

The problem I have faced is that Java client creates "behind the scene"
some threads to manage connection - like:
         lines 299-301 of AMQConnection class.
        // start the main loop going
        new MainLoop("AMQP Connection " + getHostAddress() + ":" +
        // after this point clear-up of MainLoop is triggered by closing
the frameHandler.

Unfortunatelly, those threads aren't "daemon" threads. So, when main
application ends and appropriate connection closing not occurs, the VM
won't terminate. My approach was to add some shutdown hook to close
RabbitMQ connections if it is live inside my "jar component". But, due to
those non-daemon threads, VM is not going ever to be terminated and
shutdown hooks fired.

It is a question to RabbitMQ driver developers, if the internal threads
could be fired as daemon threads, could it be done in future releases?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/attachments/20120518/7efce85e/attachment.htm>

More information about the rabbitmq-discuss mailing list