#future #retry #futures-retry

retrier

为 futures 提供的 wasm 兼容重试库

2 个版本

0.1.3 2024年7月2日
0.1.0 2024年7月2日

#367 in 异步

MIT 许可证

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