Given the claim that there is a RabbitMQ issue with framing I perhaps should explain what the frame max really controls.
Every published message is at least two frames on the wire:
[basic.publish the method][content header][body frame]*
So there is 0 to N body frames, each up to frame_max in size. Since the broker cannot
possibly know actual frame size, it is specified in the frame prefix. If a client miscalculates the value in a way that RabbitMQ can detect, the connection will be closed with a fatal error. Pika will simply indicate an error to the client.
Poorly implemented clients can do just about anything, such as try to reconnect, enter an infinite loop or both. Which obviously has an effect on resource usage of the server
one way or another.
Another potential issue is an overflow or underflow that makes a buggy client put an incorrect frame size. RabbitMQ doesn’t allocate memory directly but the parser is driven by the indicated size, of course, so at some point a supposed frame size of 1 GB will cause about 1 GB to be allocated.
Server logs and a traffic capture will make it very clear what is really going on.
All of this leads to a pretty obvious conclusion: simply use frame size of 128 kB or so,
it is “infinite” for most messages out there anyway (most messages are less than 4 kB in size) and there’s a reasonable limit as to how much damage a buggy client can do in the 2nd scenario above.
The same issue exists with channel_max. Channels consume resources and an app that leaks channels (certainly not unheard of) could previously open up to 65K channels per connection, which is a lot.
Which lead to a default of 2047 (plus one special channel for connection negotiation and error reporting) and even suggested default of 127, plus a way to cap the limit server-wide via configuration. Otherwise the first app that happens to leak channels will potentially affect service availability for every app in the system.