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 异步
每月28,466次下载
用于 14 个crate (7直接使用)
11KB
107 行
exponential-backoff
具有抖动的指数退避生成器。作为实现自定义重试函数的构建块。
为什么?
当网络请求超时时,通常最好的解决方法是重试。但立即重试最多可能只会造成一些网络开销,最坏的情况可能导致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