#client #streaming #pravega #exponential-backoff

pravega-client-retry

Pravega Rust 客户端的内部库

8 个版本

0.3.7 2024年2月24日
0.3.6 2023年10月28日
0.3.5 2023年8月22日
0.3.4 2023年5月17日
0.1.0 2021年3月5日

#4#pravega

每月 30 次下载
用于 5 个 crate (直接使用 4 个)

Apache-2.0

29KB
555

重试

提供通用的重试函数。


lib.rs:

重试是一个用于通过指数退避重试可能失败的操作的 crate。它设计了一个声明式接口,以便于使用。可以使用如下方式


    #[derive(Debug, PartialEq, Eq, Snafu)]
    pub enum SnafuError {
        #[snafu(display("Retryable error"))]
        Retryable,
        #[snafu(display("NonRetryable error"))]
        Nonretryable,
    }

let retry_policy = RetryWithBackoff::default_setting().max_tries(1);
let mut collection = vec![1, 2].into_iter();
let value = retry_sync(retry_policy, || match collection.next() {
    Some(n) if n == 2 => RetryResult::Success(n),
    Some(_) => RetryResult::Retry(SnafuError::Retryable),
    None => RetryResult::Fail(SnafuError::Nonretryable),
}).unwrap();

assert_eq!(value, 2);

上述代码将在抛出 Err(Retry::Retry) 时重试代码 1 次。如果抛出 Err(Retry::Err) 或返回成功,则立即返回。失败的尝试之间的延迟分别为 1 和 10。如果所有重试都失败,则返回带有错误消息的 Err(RetryErr)。

依赖关系

~4–10MB
~104K SLoC