1 个不稳定版本
0.1.0 | 2024年2月13日 |
---|
#31 在 #retry
49 每月下载量
24KB
275 行
easy_retry
Easy Retry
easy_retry
是一个 Rust 库,它提供用于不同策略的重试操作的工具。
此库提供了多种重试策略,包括线性、指数及其异步版本。您可以选择最适合您需求的策略。
该库旨在简单易用。它提供了一个单一的枚举 EasyRetry
,表示不同的重试策略。您可以通过调用 EasyRetry
枚举上的一个 new_*
方法来创建新的重试策略。
该库提供了一个 run
方法,该方法接受一个闭包并以指定的重试策略运行操作。如果操作在所有重试后失败,则 run
方法返回操作的结果,或者返回一个错误。
run
方法期望闭包返回一个 Result
类型。应该包含操作结果的 Ok
变体,而应该包含在操作过程中发生的错误的 Err
变体。
功能
- 线性重试:在这种策略中,重试之间的延迟是恒定的。
- 指数重试:在这种策略中,重试之间的延迟在每次重试后加倍。
- 线性异步重试:这是线性重试策略的异步版本。此功能仅在启用
async
功能时可用。 - 指数异步重试:这是指数重试策略的异步版本。此功能仅在启用
async
功能时可用。
示例
use easy_retry::EasyRetry;
fn my_sync_fn(_n: &str) -> Result<(), std::io::Error> {
Err(std::io::Error::new(std::io::ErrorKind::Other, "generic error"))
}
// Retry the operation with a linear strategy (1 second delay, 2 retries)
let retry_strategy = EasyRetry::new_linear(1, 2);
let result = retry_strategy.run(|| my_sync_fn("Hi"));
assert!(result.is_err());
异步示例
use easy_retry::EasyRetry;
async fn my_async_fn(_n: u64) -> Result<(), std::io::Error> {
Err(std::io::Error::new(std::io::ErrorKind::Other, "generic error"))
}
#[tokio::main]
async fn main() {
// Retry the operation with an exponential strategy (1 second delay, 2 retries)
let retry_strategy = EasyRetry::new_exponential_async(1, 2);
let result = retry_strategy.run_async(|| my_async_fn(42)).await;
assert!(result.is_err());
}
使用方法
将其添加到您的 Cargo.toml
[dependencies]
easy_retry = "0.1.0"
然后,将其添加到您的crate根目录(main.rs
或 lib.rs
)
extern crate easy_retry;
现在,您可以使用 EasyRetry
枚举来创建重试策略
use easy_retry::EasyRetry;
let retry_strategy = EasyRetry::new_linear(100, 5);
许可证
此项目采用 MIT 许可证。
许可证:MIT
依赖关系
~0–1.3MB
~22K SLoC