[rabbitmq-discuss] Multithreading and rabbitmq-c
alan.antonuk at gmail.com
Fri Feb 10 20:58:30 GMT 2012
Responses inlined below:
On Fri, Feb 10, 2012 at 2:00 PM, Arun Chandrasekaran <visionofarun at gmail.com
> Hi all,
> With rabbitmq-c, it is possible to bind on different channels from
> different threads?
> Basically, I'm not sharing any of these between the threads:
> amqp_connection_state_t, socket, channel.
You have interpreted the documentation correctly:
amqp_connection_state_t, its socket, and all associated amqp_channel_t's
must not be shared between threads. Its ok to have separate instances of
these objects used in different threads.
> Here is the "examples/amqp_consumer.c" sample code modified for 2 threads:
> http://codepad.org/zPa91lbr. I have also attached the code for your
> I get this error from the second thread :
> "Declaring queue: server connection error 504, message: CHANNEL_ERROR -
> expected 'channel.open'"
Your problem is on line 156:
amqp_channel_open(conn, 1); /* opens channel 1 */
You then try to use channel stored in the variable chan on line 160:
... = amqp_queue_declare(conn, chan /* may not be channel 1 */ ...);
Try changing 156 to open channel stored in chan.
Also note that channels are on a per-connection basis, so it is ok to have
two different connections with the same channel identifiers.
> The README clearly states that it is valid to have different connections,
> sockets and channels per thread (last section):
Just an FYI: the canonical sources for the rabbitmq-c library have moved to
a new location:
> Can someone give me an insight into where I am going wrong or if it is a
> limitation with rabbitmq-c?
> rabbitmq-discuss mailing list
> rabbitmq-discuss at lists.rabbitmq.com
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the rabbitmq-discuss