8 个版本
0.3.7 | 2024年2月24日 |
---|---|
0.3.6 | 2023年10月28日 |
0.3.5 | 2023年8月22日 |
0.3.4 | 2023年5月17日 |
0.1.0 | 2021年3月5日 |
#4 在 #pravega
每月 30 次下载
用于 5 个 crate (直接使用 4 个)
29KB
555 行
重试
提供通用的重试函数。
lib.rs
:
重试是一个用于通过指数退避重试可能失败的操作的 crate。它设计了一个声明式接口,以便于使用。可以使用如下方式
#[derive(Debug, PartialEq, Eq, Snafu)]
pub enum SnafuError {
#[snafu(display("Retryable error"))]
Retryable,
#[snafu(display("NonRetryable error"))]
Nonretryable,
}
let retry_policy = RetryWithBackoff::default_setting().max_tries(1);
let mut collection = vec![1, 2].into_iter();
let value = retry_sync(retry_policy, || match collection.next() {
Some(n) if n == 2 => RetryResult::Success(n),
Some(_) => RetryResult::Retry(SnafuError::Retryable),
None => RetryResult::Fail(SnafuError::Nonretryable),
}).unwrap();
assert_eq!(value, 2);
上述代码将在抛出 Err(Retry::Retry) 时重试代码 1 次。如果抛出 Err(Retry::Err) 或返回成功,则立即返回。失败的尝试之间的延迟分别为 1 和 10。如果所有重试都失败,则返回带有错误消息的 Err(RetryErr)。
依赖关系
~4–10MB
~104K SLoC