Skip to content

ReqFuse is a Req plugin for the fuse circuit-breaker library.

License

Notifications You must be signed in to change notification settings

carsdotcom/req_fuse

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ReqFuse

ReqFuse fuses

ReqFuse on Github https://github.com/carsdotcom/req_fuse

ReqFuse on Hex https://hex.pm/packages/req_fuse

ReqFuse on HexDocs https://hexdocs.pm/req_fuse

CI

Req plugin for :fuse

ReqFuse provides circuit-breaker (or load-shedding) functionality for HTTP requests that use the Req library.

Usage

After adding the dependencies, simply attach the ReqFuse step to your request ensuring you are passing in the required and any optional fuse configuration.

Mix.install([
  {:req, "~> 0.3"},
  {:req_fuse, "~> 0.2"}
])

req_fuse_opts = [fuse_name: My.Example.Fuse]
req = [url: "https://httpstat.us/500", retry: :never]
|> Req.new()
|> ReqFuse.attach(req_fuse_opts)

# Fire the request enough times to melt the fuse
Enum.each(0..10, fn _ -> Req.request(req) end)
  => :ok
Req.request(req)
  => 08:45:42.518 [warning] :fuse circuit breaker is open; fuse = Elixir.My.Example.Fuse
  => {:error, %RuntimeError{message: "circuit breaker is open"}}

Installation

If available in Hex, the package can be installed by adding req_fuse to your list of dependencies in mix.exs:

def deps do
  [
    {:req_fuse, ">= 0.2.0"}
  ]
end

Twiddling the Knobs

Attach the circuit-breaker :fuse step and configure the available options

Fuse Options

  • :fuse_melt_func - A 1-arity function to determine if response should melt the fuse defaults to ReqFuse.Steps.Fuse.melt?/1
  • :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
  • :fuse_name - REQUIRED the name of the fuse to install
  • :fuse_opts The fuse strategy options (see fuse docs for reference) (order matters) See ReqFuse.Steps.Fuse.defaults/0 for more information.
  • :fuse_verbose - If false, suppress Log output

See https://github.com/jlouis/fuse#tutorial for more information about the supported fuse strategies and their options.

See also the additional discussion on options in ReqFuse.Steps.Fuse

License

See LICENSE

Updates

See CHANGELOG.md

Updating the changelog. (Uses auto-changelog) https://github.com/cookpete/auto-changelog

auto-changelog --breaking-pattern "BREAKING CHANGE" --template keepachangelog --commit-limit false --unreleased

Tagging by version in mix.exs

  git tag `grep -e '@version \"\d\.\d\.\d\".*' mix.exs | awk '{gsub(/"/, "", $2); print $2}'`

About

ReqFuse is a Req plugin for the fuse circuit-breaker library.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages