[rabbitmq-discuss] Confirmation listeners and closing a channel

Adam Rabung adamrabung at gmail.com
Mon Jan 23 20:39:52 GMT 2012

I am trying to understand the effect ConfirmationListeners have on channel
closing.  It looks like if messages are published with "mandatory=true",
the corresponding Channel.close will block until all notifications have
been received (unsure of any timeout, I've seen it block for over a
minute).  I understand "mandatory" to mean "return the message to all
Return/Confirm listeners".  Is this blocking behavior also part of
mandatory behavior, or should close() happen immediately?

Something else interesting happens when you close a channel with pending
callbacks: listeners are immediately removed.  The consequence is you block
until all confirmations/returns have happened, but your listeners don't
receive them.

Here's some example code:

If you call this with
RabbitTest.publish(0, exchange, routingKey, msg, brokerAddress);
prints "0 callbacks, waited 0ms before close, close took 5959"

RabbitTest.publish(5000, exchange, routingKey, msg, brokerAddress);
prints "427 callbacks, waited 5000ms before close, close took 833"

Note how both take roughly 5800ms.  On the first call, we don't pause
before calling close, and receive 0 callbacks. However, the second one,
which waits 5000ms before trying to call close, gets most of the callbacks.
 A longer pause before close results in all callbacks being handled.

To reproduce this, I use a roughly 200 character string as my message.
 It's also important that the message be published as "persistent" - I
think transient messages are too fast to reveal this :)

Should callbacks block close?  If so, should listeners continue to receive
callbacks as close happens?

Thank you,
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/attachments/20120123/b641b023/attachment.htm>

More information about the rabbitmq-discuss mailing list