#zero-cost #performance #async #zero-copy #functional #exponential-backoff

keen-retry

一个简单而强大的零成本抽象和零复制库,用于错误处理和恢复

18 个不稳定版本 (4 个破坏性版本)

0.5.0 2024 年 8 月 20 日
0.4.1 2024 年 4 月 29 日
0.4.0 2024 年 1 月 8 日
0.3.2 2023 年 12 月 4 日
0.1.1 2023 年 7 月 27 日

#226异步

Download history 32/week @ 2024-05-02 6/week @ 2024-05-09 20/week @ 2024-05-16 13/week @ 2024-05-23 8/week @ 2024-05-30 16/week @ 2024-06-06 14/week @ 2024-06-13 13/week @ 2024-06-20 4/week @ 2024-06-27 4/week @ 2024-07-04 1/week @ 2024-07-18 4/week @ 2024-07-25 4/week @ 2024-08-01 140/week @ 2024-08-15

每月 148 次下载
用于 3 crates

无许可

10MB
1K SLoC

keen-retry

介绍

keen-retry crate 是一个为 Rust 应用程序提供零成本、灵活且强大的重试逻辑实现方式,同时支持向库中添加容错性。无论您是开发 API、高性能系统、分布式应用程序还是简单的工具,keen-retry 都提供了一套全面的特性,以优雅地处理暂时性故障,确保您的应用程序保持弹性、可靠,并能提供丰富的诊断信息,这对于解决故障的根本原因至关重要。

特性

  • 零成本抽象:利用 Rust 强大的类型系统和编译时优化,以无运行时开销的方式提供重试功能。
  • 清晰的错误区分:由于非暂时性错误而重试操作是徒劳的,会浪费资源并可能损害应用程序性能。
  • 仪表化和日志记录:全面的日志记录和仪表化特性,用于观察和调试重试操作。
  • 可组合的重试逻辑:易于链式和可组合的重试操作,允许编写清晰且易于维护的代码。
  • Async/Await 支持:对异步编程的第一类支持,与 Tokio 和其他异步运行时兼容。
  • 灵活的重试退避策略:包括从简单的恒定延迟到复杂的带有抖动的指数退避策略,适用于不同的场景和需求。

快速入门

集成您的库/API

第一步是将您的库或 API 中每个可重试的操作返回丰富的 RetryResult 类型,该类型清楚地区分了 OkFatalTransient 变体

/// Wrapper around [Self::connect_to_server_raw()], enabling `keen-retry` on it
pub async fn connect_to_server(&self) -> RetryProcedureResult<ConnectionErrors> {
  self.connect_to_server_raw().await
    .map_or_else(|error| match error.is_fatal() {
                   true  => RetryResult::Fatal     { input: (), error },
                   false => RetryResult::Transient { input: (), error },
                 },
                 |_| RetryResult::Ok { reported_input: (), output: () })
}

用法

现在,在应用程序中,您可以通过零成本的函数式 API 使用它

let resolved = connect_to_server()
    .retry_with(|_| connect_to_server())
    .<one-of-the-backoff-strategies>(...)
    .<instrumentation-facilities>(...)
    .<mapping-of-outputs-and-errors>(...);

keen-retry

keen-retry-diagram.png

如需了解更多详情,请参阅 tests/use_cases.rs,其中包含高级演示,例如如何添加完整的仪器化(如在生产应用中看到的那样)、如何组合嵌套的重试逻辑以及如何实现通用的“部分完成带延续闭包”设计模式。

性能分析

keen-retry 经过严格基准测试以确保其遵循零成本抽象原则,这对于系统编程至关重要。我们的基准测试可在 benches/zero_cost_abstractions.rs 找到,展示了该包的效率。

keen-retry-zero-cost-abstractions.png

书籍

要深入了解适用于 keen-retry 的设计模式、原则、策略和最佳实践,请务必探索我们的配套 keen-retry crate 的书籍,该书籍作为 definitive guide,提供洞察力和实际示例,以充分利用 keen-retry 在各种软件开发场景中的全部潜力。

The keen-retry Book

依赖