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 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.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.