Dispatcher thread needs be set daemon/non-daemon depending of new configuration option to allow manipulating this behaviour.
Historically, for the 0-8/0-9/0-9-1 client the use of Mina kept the
JVM alive when a MessageListener was set, allowing asynchronous
delivery to continue without the user having taken any explicit action
to keep the JVM alive. Since we removed Mina this is no longer the
case, and if there are no non-daemon threads then the JVM will now
exit even though the user has set a MessageListener set. Investigating
other providers suggests the typical behaviour is to make use of
non-daemon threads by default, preventing this happening, but allowing
users who desire that behaviour to configure it as such.
For example, tibco seem to do exactly what I am proposing with their
ActiveMQ seems to control this through transport options, defaulting
to non-daemon threads with an option to reconfigure it: