How MailerQ waits between attempts verifiedimportant
Retry waiting is done by the broker, not the engine: a message is published into a queue whose messages expire after a fixed time and whose expiry routes them back to the sending queue.
In detail
The engine holds nothing while it waits. It picks the ladder steps that add up to the delay it wants, publishes the message into the largest one that fits, and forgets it; when the TTL expires, RabbitMQ dead-letters the message onward — to the next step, and finally back to the sending queue. A 600-second wait is 512 + 64 + 16 + 8, four hops. Three consequences follow. Waiting mail is visible: the depth of the step queues is the only honest answer to "how much is pending retry", and that is where Hub's telemetry has to look, since intermediate attempts are never published as results. Waiting mail is at the mercy of the broker: with rabbitmq-persistent off, a broker crash takes every pending retry with it. And waiting is approximate by construction — the delay is assembled from powers of two, so the retry interval a message actually gets is the nearest sum, not the number configured.