Configurando quantidade de tentativas no Oban
Mesmo com o mecanismo de retry do Tesla, nossa requisição pode falhar e o Tesla não conseguir se recuperar. Para termos mais chance de sucesso, podemos configurar a quantidade de tentativas que o Oban poderá fazer antes de desistir. Por padrão ele tenta uma vez, mas podemos aumentar a quantidade. Nesse exemplo colocarei duas tentativas.
Para configurar, vamos adicionar opções a nossa Oban.Worker:
defmodule CoffeeShop.Integrations.Coffee.HotCoffeesWorker do
use Oban.Worker, max_attempts: 2
alias CoffeeShop.Integrations.Coffee.Response
alias CoffeeShop.Integrations.Coffee.Client
@impl Oban.Worker
def perform(%Oban.Job{args: %{"opts" => opts}}) do
opts = to_list(opts)
case Client.all_hot_coffees(opts) do
{:ok, %Response{status: 200, body: _body}} -> :ok
{:ok, %Response{status: status, body: _body}} -> {:error, "status: #{status}"}
error -> error
end
end
defp to_list(map) do
Enum.map(map, fn {key, value} -> {String.to_existing_atom(key), value} end)
end
endAdicionamos a opção max_attempts para 2 . Agora precisamos testar se a configuração está correta.
Na linha 19 fazemos um check se o máximo de tentativas reflete o configurado. Deixamos o resto com o Oban.
Atualizado
Isto foi útil?