[rabbitmq-discuss] Question about Connections and Channels

Emile Joubert emile at rabbitmq.com
Wed Dec 22 17:41:30 GMT 2010


Hi Thadeu,

Your project sounds interesting. If I understand your question correctly 
you want to know if you should be using one connection with many 
channels, or many connections each with a single channel.

A possibly relevant consideration is that if the broker needs to apply 
backpressure because of an overactive producer then all the channels 
sharing a connection with that producer will be blocked. Channels that 
can't tolerate this risk should have a connection to themselves. For the 
same reason you may want to separate producers and consumers to use 
different connections.

I would expect it to be more convenient for you to have an AMQP client 
in each JVM and therefore use a connection per JVM. AMQP connections are 
cheap resources and you need not try to conserve them. Brokers with tens 
of thousands of connections are not unheard of.

On 19/12/10 13:20, Thadeu Russo wrote:
> Hi,
>
> I need to architect a Java application using rabbitmq as its message
> broker. It is a distributed application and the message broker will play
> the role of connect the JVMs. Basically, each JVM has sets of objects
> (currently they are grouped by host:port) that can change messages to
> other objects in other groups in other virtual machines (there is a 1:1
> bi-directional relationship between groups of objects in different JVMs).
> The idea of use the broker is to avoid the number of tcp ports I have to
> open and also to take advantage of the message delivery guaranties.
>
> The design is simple: each group of objects will have an exchange and 2
> queues (incoming and outcoming) to change messages.
>
> I would like to know if you guys advise the following configuration
> regarding rabbitmq:
>
> 1- Have 1 connection per JVM
> 2- Have multiple channels to that connection. Each channel will be
> associated with those 2 queues
>
> What is concerning me is: the number of sends/receives per channel is
> high (about 5k/second). Should I have multiple connections (like a
> pool), or it is ok to use just 1 connection? If I have a pool of
> connections, I understand they will share the same tcp port, and I could
> not see any difference in using a single Connection.

The broker port will be same for each of multiple connections, but the 
peer port will typically be random. The difference is that connections 
with a single channel can fail and block without affecting other 
connections.

Regards

Emile


More information about the rabbitmq-discuss mailing list