lib/amqp/backoff/jittered.ex
defmodule Amqpx.Backoff.Jittered do
@moduledoc """
Implements a jittered backoff strategy
"""
@spec backoff(
attempt :: number(),
base_backoff_ms :: number(),
max_backoff_ms :: number()
) :: pos_integer()
def backoff(attempt, base_backoff_ms, max_backoff_ms) do
(base_backoff_ms * :math.pow(2, attempt))
|> min(max_backoff_ms)
|> trunc
|> :rand.uniform()
end
end