[rabbitmq-discuss] Java client: Closing channel in channel shutdown listener

Simon MacMullen simon at rabbitmq.com
Thu Nov 4 11:10:57 GMT 2010


On 03/11/10 15:39, jiri at krutil.com wrote:
> Simon,
>
>> Hi Jiri. The shutdown listener is invoked by the connection's mainloop
>> thread, so it can't in itself do anything that involves sending data
>> over the connection (which includes closing channels).
>
> OK. Can I close the connection from a channel shutdown listener?

Not directly; it has the same problem. Of course, you could just spin up 
a short-lived thread to do the closing in either case.

>> Do you need to close channels? If the error is hard, the connection
>> will be closed and implicitly all channels will close; if the error is
>> soft only the channel that caused the error will close and the others
>> will keep working.
>
> I have a few long-lived channels in my app. If any of them gets closed
> due to an error (maybe I attempt to publish to a nonexistent exchange),
> I want to close everything, re-connect and re-open my channels. This is
> to avoid a situation when a closed channel causes that part of the app
> does not work, trying to use a closed channel over and over again.

Right. Of course, you could just reopen the channel that closed, but 
your approach may be simpler.

> So I guess the easiest way to go for me is: in the channel shutdown
> listener, close the connection without trying to close channels, then
> re-connect.

If you close the connection the channels get closed implicitly. But as 
noted above, you'll need to do that in a different thread.

Cheers, Simon

-- 
Simon MacMullen
Staff Engineer, RabbitMQ
SpringSource, a division of VMware



More information about the rabbitmq-discuss mailing list