9个版本 (5个稳定版)

2.0.0 2024年8月23日
1.2.1 2024年8月15日
1.2.0 2023年1月30日
1.1.0 2021年12月20日
0.1.0 2018年7月11日

#102 in 异步

Download history 4341/week @ 2024-05-03 4592/week @ 2024-05-10 4679/week @ 2024-05-17 4267/week @ 2024-05-24 4427/week @ 2024-05-31 5096/week @ 2024-06-07 5958/week @ 2024-06-14 6230/week @ 2024-06-21 5579/week @ 2024-06-28 6113/week @ 2024-07-05 6802/week @ 2024-07-12 7545/week @ 2024-07-19 7482/week @ 2024-07-26 6330/week @ 2024-08-02 6463/week @ 2024-08-09 6752/week @ 2024-08-16

每月28,466次下载
用于 14 个crate (7直接使用)

MIT/Apache

11KB
107

exponential-backoff

crates.io version downloads docs.rs docs

具有抖动的指数退避生成器。作为实现自定义重试函数的构建块。

为什么?

当网络请求超时时,通常最好的解决方法是重试。但立即重试最多可能只会造成一些网络开销,最坏的情况可能导致DDoS攻击。因此,我们必须对此负责。

Stripe博客上可以找到关于重试策略的良好解释。

使用方法

在这里,我们尝试从磁盘读取文件,如果失败则重试。更现实的情况可能是执行HTTP请求,但方法应该是相似的。

use exponential_backoff::Backoff;
use std::{fs, thread, time::Duration};

let attempts = 3;
let min = Duration::from_millis(100);
let max = Duration::from_secs(10);

for duration in Backoff::new(attempts, min, max) {
    match fs::read_to_string("README.md") {
        Ok(string) => return Ok(string),
        Err(err) => match duration {
            Some(duration) => thread::sleep(duration),
            None => return Err(err),
        }
    }
}

安装

$ cargo add exponential-backoff

另请参阅

进一步阅读

许可

MIT OR Apache-2.0

依赖关系

~28KB