ApiBrasil.Core.Retry (APIBrasil v0.0.1)

Copy Markdown View Source

Política de retry da SDK.

Por padrão a SDK tenta novamente apenas em HTTP 429 (rate limit) e em falhas de conexão — nunca em timeouts nem em erros de negócio, para não duplicar cobranças/envios.

ApiBrasil.new(
  retry: %ApiBrasil.Core.Retry{
    retries: 3,
    min_delay: 500,
    retry_on_statuses: [429, 503]
  }
)

# ou desativando o retry
ApiBrasil.new(retry: ApiBrasil.Core.Retry.none())

Todos os tempos são em milissegundos.

Summary

Functions

Política de retry.

Calcula o backoff exponencial com jitter: min_delay * 2^tentativa, limitado a max_delay. A tentativa é contada a partir de 0.

Número total de tentativas (a original mais os retries).

Cria a política a partir de uma keyword list ou de um mapa.

Política que desativa o retry.

Informa se um status HTTP dispara retry nesta política.

Aguarda o atraso informado. Zero não bloqueia.

Types

t()

@type t() :: %ApiBrasil.Core.Retry{
  max_delay: non_neg_integer(),
  min_delay: non_neg_integer(),
  retries: non_neg_integer(),
  retry_on_statuses: [pos_integer()]
}

Functions

%ApiBrasil.Core.Retry{}

(struct)

Política de retry.

  • :retries — novas tentativas além da original. Padrão: 2.
  • :min_delay — atraso base do backoff exponencial, em ms. Padrão: 300.
  • :max_delay — teto do atraso entre tentativas, em ms. Padrão: 5_000.
  • :retry_on_statuses — status HTTP que disparam retry. Padrão: [429].

backoff_delay(retry, attempt)

@spec backoff_delay(t(), non_neg_integer()) :: non_neg_integer()

Calcula o backoff exponencial com jitter: min_delay * 2^tentativa, limitado a max_delay. A tentativa é contada a partir de 0.

max_attempts(retry)

@spec max_attempts(t()) :: pos_integer()

Número total de tentativas (a original mais os retries).

new(retry)

@spec new(t() | keyword() | map()) :: t()

Cria a política a partir de uma keyword list ou de um mapa.

none()

@spec none() :: t()

Política que desativa o retry.

retries_status?(retry, status)

@spec retries_status?(t(), pos_integer()) :: boolean()

Informa se um status HTTP dispara retry nesta política.

sleep(delay)

@spec sleep(non_neg_integer()) :: :ok

Aguarda o atraso informado. Zero não bloqueia.