13 个版本

0.5.0 2024年8月22日
0.4.4 2024年4月8日
0.4.3 2024年3月8日
0.4.1 2023年5月19日
0.0.2 2022年4月14日

#55 in Rust 模式

Download history 35084/week @ 2024-05-02 38799/week @ 2024-05-09 36396/week @ 2024-05-16 38877/week @ 2024-05-23 41696/week @ 2024-05-30 36157/week @ 2024-06-06 42773/week @ 2024-06-13 36598/week @ 2024-06-20 38538/week @ 2024-06-27 39219/week @ 2024-07-04 42273/week @ 2024-07-11 38680/week @ 2024-07-18 40989/week @ 2024-07-25 41782/week @ 2024-08-01 47736/week @ 2024-08-08 41405/week @ 2024-08-15

180,007 每月下载量
用于 165 包(17 个直接使用)

Apache-2.0

75KB
1.5K SLoC

backon − 构建状态 最新版本

无需努力的退避重试。


流行的 backoff 的相反退避实现。

  • 更新:由 Rust 版本 2021 和最新稳定版开发。
  • 更简洁:基于迭代器的抽象,易于使用,易于定制。
  • 更简单:基于特质的实现,像闭包提供的本地函数一样工作。

快速开始

重试阻塞函数。

use anyhow::Result;
use backon::BlockingRetryable;
use backon::ExponentialBuilder;

fn fetch() -> Result<String> {
     Ok("hello, world!".to_string())
}

fn main() -> Result<()> {
    let content = fetch.retry(&ExponentialBuilder::default()).call()?;
    println!("fetch succeeded: {}", content);

    Ok(())
}

重试异步函数。

use anyhow::Result;
use backon::ExponentialBuilder;
use backon::Retryable;

async fn fetch() -> Result<String> {
    Ok(reqwest::get("https://www.rust-lang.net.cn").await?.text().await?)
}

#[tokio::main]
async fn main() -> Result<()> {
    let content = fetch.retry(&ExponentialBuilder::default()).await?;
    println!("fetch succeeded: {}", content);

    Ok(())
}

贡献

查看 CONTRIBUTING.md 指南以获取有关如何开始为此项目做出贡献的更多详细信息。

获取帮助

提交 问题 进行错误报告或在 讨论 中提问。

许可证

根据 Apache 许可证,版本 2.0 许可。

依赖关系

~0–1.4MB
~24K SLoC