У меня есть повторяющиеся задачи, которые я хочу выполнять с рядом работников (т. Е. Модель конкурирующих потребителей). Вероятность неудачи во время выполнения задачи довольно низкая, поэтому в случае таких редких событий я хотел бы повторить попытку через короткий промежуток времени, скажем, за 1 секунду.
Последовательность последовательных неудач еще менее вероятнано все же возможно, поэтому для нескольких начальных попыток я хотел бы придерживаться 1-секундной задержки.
Однако, если последовательность сбоев достигает некоторой точки, то, скорее всего, есть какая-то внешняя причина, по которойможет вызвать эти сбои. Итак, с этого момента я хотел бы начать увеличивать задержку.
Допустим, что желаемое распределение задержек выглядит следующим образом:
first appearance in the queue - no delay
retry 1 - 1 second
retry 2 - 1 second
retry 3 - 1 second
retry 4 - 5 second
retry 5 - 10 seconds
retry 6 - 20 seconds
retry 7 - 40 seconds
retry 8 - 80 seconds
retry 9 - 160 seconds
retry 10 - 320 seconds
another retry - drop the message
Я нашел много информации о DLX. (Обмен мертвыми буквами), которые могут частично решить проблему. По-видимому, легко достичь бесконечного числа попыток с одинаковой задержкой. В то же время я не нашел способа увеличить задержку или остановить ее после определенного числа попыток.
Я ищу самое чистое из возможных решений RabbitMQ. Однако меня интересует все, что работает.