[rabbitmq-discuss] Java client: channel synchronization deadlock?

Jonathan McGee jon at arithum.com
Fri Dec 12 21:06:20 GMT 2008


Hi,

This is my first post to the list.  Thanks for creating this  
incredible software!

I've been following the Java API guide here http://www.rabbitmq.com/ 
api-guide.html

In the guide it recommends "If more than one thread needs to access a  
particular Channel instance, the application should enforce mutual  
exclusion itself, for example by synchronising on the Channel."

I did exactly this, however the following code causes a deadlock:

synchronized(channel) {
	channel.queueDeclare("foo");
}

It appears this is because the RabbitMQ client does its own locking  
on "this" internally.

I'm wondering if the RabbitMQ client was updated to become thread- 
safe, and the guide is simply out of date?  When I remove the  
synchronization, things work fine.  Is the API actually 100% thread- 
safe now, or would you still recommend synchronizing on a separate  
object other than the Channel itself?

(As a side note, the guide also indicates that you must obtain a  
ticket to access a Channel, but this doesn't seem to be required  
anymore.)

Cheers,
Jon





More information about the rabbitmq-discuss mailing list