#circuit-breaker #command #hystrix

crius

Crius 是一个简单的类似 hystrix 的熔断器

11 个版本

使用旧的 Rust 2015

0.4.0 2018年11月17日
0.3.2 2018年11月13日
0.3.1 2017年7月17日
0.2.0 2017年7月5日
0.1.5 2017年7月2日

#403并发

24 个每月下载

Apache-2.0

21KB
375

Crius 构建状态 Cargo 版本

Crius 是一个简单的 rust 类似 hystrix 的熔断器。

"在混乱之中,也存在着机会"

用法

简单命令

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);

带有回退的命令

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);

带有自定义配置的命令

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);

配置

circuit_open_ms - 电路打开后拒绝命令的时间(毫秒)- 默认 5000

error_threshold - 电路断开所需的最小错误数量 - 默认 10

error_threshold_percentage - 电路断开所需的最小错误百分比 - 默认 50

buckets_in_window - 滚动窗口以跟踪成功/错误调用,此属性定义窗口中的桶数量(bucket_size_in_ms * buckets_in_window 是窗口的总长度,以毫秒为单位)- 默认 10

bucket_size_in_ms - 此属性定义桶的长度(毫秒),即每个 x 毫秒创建一个新的桶(bucket_size_in_ms * buckets_in_window 是窗口的总长度,以毫秒为单位)- 默认 1000

circuit_breaker_enabled - 定义熔断器是否启用 - 默认 true

无运行时依赖