> If RabbitMQ crashes because it's out of memory, I understand that it
> should be able to start again without losing any data
Only *durable* queues and exchanges, and *persistent* messages are
recoverable, as per the spec.
> Will the next message sent to it (before any messages are dequeued)
> cause the queue to crash again? I assume that must be the case, since
> nothing was lost when the program crashed.
Messages aren't the only entities consuming memory. I would hope that
RabbitMQ is able to recover the state (as defined above) after an OoM
error, and take in a few more messages, but it's not something we have
tested. It's possible that the startup sequence uses just that little
bit more memory which would push the system over the edge.
Generally, if there are worries about RabbitMQ running out of memory one
should try catching that case well before it happens. It's not really
advisable to run a system so close to the limits.