4 ms·
How do the AMQP frames increase in size indefinitely? (I use DLXs and message TTLs to do timed retries, without issue, although at a very low retry rate, so ma
by tobz 11y ago
How do the AMQP frames increase in size indefinitely? (I use DLXs and message TTLs to do timed retries, without issue, although at a very low retry rate, so maybe I'm just not hitting your purported issue with increasing frame sizes?)
- lobster_johnson 11y agoEvery time a dead-lettering happens, RabbitMQ will do this [1]: The dead-lettering process adds an array to the header of each dead-lettered message named x-death. This array contains an entry for each time the message was dead-lettered. This table is never truncated. It exists in the AMQP frame and will grow indefinitely. The AMQP spec mandates that clients negotiate a frame-max size per connection [2], and I believe RabbitMQ is in violation of the spec through this behaviour if the client specifies a non-zero value. (RabbitMQ even ignored this negotiation prior to 3.1, and there's a document [3] which indicates it ignores limits entirely.) As a result, clients that follow frame-max strictly according to spec (such as amqplib for Node.js [4]) will refuse to handle violating frames, which is understandable given that clients also like to have predictable buffer allocation. [1] https://www.rabbitmq.com/dlx.html https://www.rabbitmq.com/dlx.html [2] https://www.rabbitmq.com/specification.html https://www.rabbitmq.com/specification.html [3] https://www.rabbitmq.com/amqp-0-9-1-errata.html https://www.rabbitmq.com/amqp-0-9-1-errata.html [4] https://github.com/squaremo/amqp.node https://github.com/squaremo/amqp.node