[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