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

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

Examples

defmodule MyClient do
  def client do
    Tesla.client([
      {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,
        mode: :sync}
    ])
  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
  • :mode - how to query the fuse, which has two values:
    • :sync - queries are serialized through the :fuse_server process (the default)
    • :async_dirty - queries check the fuse state directly, but may not account for recent melts or resets

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.