Tesla.Middleware.Fuse (tesla v1.4.0) View Source

Circuit Breaker middleware using fuse

Remember to add {:fuse, "~> 2.4"} to dependencies (and :fuse to applications in mix.exs) Also, you need to recompile tesla after adding :fuse dependency:

mix deps.clean tesla
mix deps.compile tesla

Example usage

defmodule MyClient do
  use Tesla

  plug Tesla.Middleware.Fuse,
    opts: {{:standard, 2, 10_000}, {:reset, 60_000}},
    keep_original_error: true,
    should_melt: fn
      {:ok, %{status: status}} when status in [428, 500, 504] -> true
      {:ok, _} -> false
      {:error, _} -> true
    end
end

Options

  • :name - fuse name (defaults to module name)
  • :opts - fuse options (see fuse docs for reference)
  • :keep_original_error - boolean to indicate if, in case of melting (based on should_melt), it should return the upstream's error or the fixed one {:error, unavailable}. It's false by default, but it will be true in 2.0.0 version
  • :should_melt - function to determine if response should melt the fuse

SASL logger

fuse library uses SASL (System Architecture Support Libraries).

You can disable its logger output using:

config :sasl, sasl_error_logger: :false

Read more at jlouis/fuse#32 and jlouis/fuse#19.