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