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

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

Examples

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,
    mode: :sync
end

options

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

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.