[rabbitmq-discuss] Can RabbitMQ handle big messages?
matthew at rabbitmq.com
Mon Mar 12 16:37:15 GMT 2012
On Mon, Mar 12, 2012 at 05:23:59PM +0100, Zabrane Mickael wrote:
Mmm, the "Bandwidth is infinite" section mentions this bug in Erlang,
but says nothing about the justification for it:
"Worse than that, Erlang knows whether nodes are alive or not by sending
a thing called heartbeats. Heartbeats are small messages sent at a
regular interval between two nodes basically saying "I'm still alive,
keep on keepin' on!". They're like our Zombie survivors routinely
pinging each other with messages; "Bill, are you there?" And if Bill
never replies, then you might assume he's dead (our out of batteries)
and he won't get your future communications. Anyway, heartbeats are sent
over the same channel as regular messages.
"The problem is that a large message can thus hold heartbeats back. Too
many large messages keeping heartbeats at bay for too long and either of
the nodes will eventually assume the other is unresponsive and
disconnect from each other. That's bad. In any case, the good Erlang
design lesson to keep this from happenning is to keep your messages
small. Everything will be better that way."
Somewhat ironic that AMQP itself does understand that receiving any data
from a peer indicates the peer is alive, and furthermore has the
ability to multiplex messages so that a single large message doesn't
block other messages.
More information about the rabbitmq-discuss