2个不稳定版本
0.2.0 | 2024年5月23日 |
---|---|
0.1.0 | 2024年5月23日 |
#27 in #backoff
6KB
backoff_macro
backoff_macro
是一个Rust过程宏,它为异步函数添加了具有指数退避的重试逻辑。该crate利用backoff
crate来处理重试,并允许用户通过简单地使用#[backoff]
来注释他们的函数,以启用此功能。
功能
- 在失败时自动重试异步函数。
- 使用指数退避来分散重试。
- 简单且易于使用的属性宏。
安装
将backoff_macro
添加到您的Cargo.toml
[dependencies]
backoff_macro = "0.1.0"
backoff = "0.3.0"
tokio = { version = "1", features = ["full"] }
用法
要使用#[backoff]
宏,只需用#[backoff]
注释您的异步函数。该函数应返回一个Result<T, E>
类型,其中E
实现了From<E>
特质,用于backoff::Error<E>
。
示例
以下是一个基本示例,演示了如何使用#[backoff]
宏
use backoff_macro::backoff;
use std::sync::atomic::{AtomicUsize, Ordering};
use std::sync::Arc;
use std::error::Error;
use tokio::main;
#[backoff]
async fn dummy_function(attempts: Arc<AtomicUsize>) -> Result<(), &'static str> {
let current_attempts = attempts.fetch_add(1, Ordering::SeqCst);
if current_attempts < 2 {
Err("error")
} else {
Ok(())
}
}
#[main]
async fn main() -> Result<(), Box<dyn Error>> {
let attempts = Arc::new(AtomicUsize::new(0));
let result = dummy_function(attempts.clone()).await;
match result {
Ok(_) => println!("Function succeeded after retries"),
Err(e) => println!("Function failed after retries: {}", e),
}
Ok(())
}
说明
- 注释:使用
#[backoff]
注释您想要应用重试逻辑的异步函数。 - 重试逻辑:该宏将使用
backoff::future::retry
方法包装函数体。 - 返回类型:确保函数返回一个
Result<T, E>
类型。
贡献
欢迎贡献!如果您发现了一个错误或有一个功能请求,请在GitHub仓库中打开一个问题。
许可协议
本项目采用MIT许可协议。有关详细信息,请参阅LICENSE文件。
依赖项
~3–9.5MB
~82K SLoC