[rabbitmq-discuss] how does the rabbitmq transport cope with WAN links?

Nikos Michalakis nmichalakis at adconion.com
Tue Jun 1 20:05:13 BST 2010

Thanks for the info, Matthew.

It seems to me that the only difference between the cluster and the shovel is that you have one WAN connection vs multiple ones. The failure detection and reconnect mechanisms seem to be the same. Assuming my messages fit in a single TCP frame (about 100-200 bytes) and I have a throughput of 20-100 messages/sec with 3 nodes on each side of the WAN link, would the cluster have serious performance issues compared to the shovel set up? I'm assuming that the sender has one "thread" per outgoing queue so the 3 copies that need to go over the WAN are sent at nearly the same time (since I have enough bandwidth over the link). Is that not the case?


On Jun 1, 2010, at 11:52 AM, Matthew Sackman wrote:

> Hi Nikos,
> On Tue, Jun 01, 2010 at 11:46:59AM -0400, Nikos Michalakis wrote:
>> I was reading the RabbitMQ docs, but couldn't find many details on what exactly the underlying protocol is for sending messages between cluster nodes.
> AMQP over TCP.
>> I 've seen that RabbitMQ relies on distributed Erlang over TCP, but is there more specific information on how links are made reliable in RabbitMQ? More particularly I'm looking to find out more details on how RabbitMQ configures its transports between cluster nodes. 
> Clustering is intended for scalability only, and really needs to work in
> a LAN situation, given the all-to-all connections made between erlang
> nodes in a cluster. I think it's more likely you'll find utility in the
> rabbitmq-shovel, which makes a broker look like a client, hence makes it
> very easy to do store-and-forward (amongst other things).
> We always rely on TCP.
>> Are there single or multiple TCP connections between nodes? 
> Normally single, in a clustering environment. But if you're using the
> shovel then it'll be one per shovel configuration.
>> What happens when a TCP connection fails? Do nodes detect that event and try to reestablish the connection automatically? Distributed Erlang has APIs for detecting a node is down. Is that used in Rabbit?
> Yes and yes. And the shovel does that too.
>> Do connections rely on TCP to deal with packet loss or is there some Rabbit magic as well?
> TCP is a reliable transport by definition, and sorts out packet loss and
> reording itself. We rely on that.
>> How are messages serialized into AMQP packets?
> The AMQP payload is totally opaque. The client APIs tend to present just
> byte arrays to set a message payload.
> Matthew
> _______________________________________________
> rabbitmq-discuss mailing list
> rabbitmq-discuss at lists.rabbitmq.com
> http://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss

More information about the rabbitmq-discuss mailing list