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 个每月下载
21KB
375 行
Crius
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