View Source Tesla.Middleware.Fuse (tesla v1.8.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 teslaExamples
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
endOptions
: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 onshould_melt), it should return the upstream's error or the fixed one{:error, unavailable}. It's false by default, but it will be true in2.0.0version: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_serverprocess (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: :falseRead more at jlouis/fuse#32 and jlouis/fuse#19.