Thanks to visit codestin.com
Credit goes to lib.rs

11 releases

Uses old Rust 2015

0.4.0 Nov 17, 2018
0.3.2 Nov 13, 2018
0.3.1 Jul 17, 2017
0.2.0 Jul 5, 2017
0.1.5 Jul 2, 2017

#731 in Concurrency

24 downloads per month

Apache-2.0

21KB
375 lines

Crius Build Status Cargo Version

Crius is a simple hystrix-like circuit breaker for rust.

"In the midst of chaos, there is also opportunity"

Usage

Simple command

use crius::{command, Config, CriusError};

#[derive(PartialEq, Debug)]
struct ExampleError;
impl From<CriusError> for ExampleError {
  fn from(_: CriusError) -> Self { ExampleError }
}

// Define a simple circuit breaker command:
let mut cmd = command(Config::default(), |n| {
  if n > 10 {
    Err(ExampleError)
  } else {
    Ok(n * 2)
  }}).unwrap();

// and run it with an example input:
let result = cmd.run(10);
assert_eq!(Ok(20), result);

Command with fallback

use crius::{command_with_fallback, Config, CriusError};

#[derive(PartialEq, Debug)]
struct ExampleError;
impl From<CriusError> for ExampleError {
  fn from(_: CriusError) -> Self { ExampleError }
}

let double_if_lt_ten = |n| if n > 10 {
  Err(ExampleError)
} else {
  Ok(n * 2)
};

// Define a simple circuit breaker command:
let mut cmd = command_with_fallback(
    Config::default(),
    double_if_lt_ten,

    // Define a fallback:
    |_err| 4, // It's always four.
).unwrap();

// and run it with an example input:
let result = cmd.run(11);
assert_eq!(Ok(4), result);

Command with custom configuration

use crius::{command, Config, CriusError};

let config = *Config::default()
    .circuit_open_ms(5000)
    .error_threshold(10)
    .error_threshold_percentage(50)
    .buckets_in_window(100)
    .bucket_size_in_ms(1000);

let mut cmd = command(config, |n| {
  if n > 10 {
    Err(ExampleError)
  } else {
    Ok(n * 2)
  }}).unwrap();

// and run it with an example input:
let result = cmd.run(10);
assert_eq!(Ok(20), result);

Configuration

circuit_open_ms - Time in ms commands are rejected after the circuit opened - Default 5000

error_threshold - Minimum amount of errors for the circuit to break - Default 10

error_threshold_percentage - Minimum error percentage for the circuit to break - Default 50

buckets_in_window - Rolling window to track success/error calls, this property defines the amount of buckets in a window (buckets_in_window * bucket_size_in_ms is the overall length in ms of the window) - Default 10

bucket_size_in_ms - This property defines the ms a bucket is long, i.e. each x ms a new bucket will be created (buckets_in_window * bucket_size_in_ms is the overall length in ms of the window) - Default 1000

circuit_breaker_enabled - Defines if the circuit breaker is enabled or not - Default true

No runtime deps