2 个版本
0.1.3 | 2024年7月2日 |
---|---|
0.1.0 | 2024年7月2日 |
#367 in 异步
33KB
605 行
retrier ♻️
为 futures 提供的 wasm 兼容重试库
任何操作的目标都应该是成功的结果。这个 crate 为操作提供了更好的成功机会。
📦 安装
在您的 Cargo.toml 文件中,在 [dependencies]
标题下添加以下内容
retrier = "0.1"
📝 注意
这是 again
库的分支。这个分支使其保持最新状态,并增加了自动化功能,应该会使维护变得更加简单。
🤸 使用
对于非常简单的案例,您可以使用模块级别的 retry
函数来重试可能失败的操作。
use std::error::Error;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
pretty_env_logger::init();
retrier::retry(|| reqwest::get("https://api.you.com")).await?;
Ok(())
}
您可能不想重试 所有 类型的错误。为了精确,您可以使用模块级别的 retry_if
函数来明确指定哪些类型的错误应该重试。
use std::error::Error;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
pretty_env_logger::init();
retrier::retry_if(
|| reqwest::get("https://api.you.com")
reqwest::Error::is_status
).await?;
Ok(())
}
您还可以使用可配置和可重用的 RetryPolicy
来自定义重试行为,以满足您应用程序的需求。
use std::error::Error;
use std::time::Duration;
use retrier::RetryPolicy;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
pretty_env_logger::init();
let policy = RetryPolicy::exponential(Duration::from_millis(200))
.with_max_retries(10)
.with_jitter(true);
policy.retry(|| reqwest::get("https://api.you.com")).await?;
Ok(())
}
有关更多示例,请参阅 文档。
依赖关系
~0.3–0.8MB
~14K SLoC