Skip to content

Latest commit

 

History

History
72 lines (51 loc) · 7.41 KB

File metadata and controls

72 lines (51 loc) · 7.41 KB

Zongsoft.Externals.Polly 扩展插件库

License NuGet Version NuGet Downloads GitHub Stars

English | 简体中文


概述

该插件库基于 Polly 开源库的插件化适配,并针对相关回调方法做了统一的抽象和映射:

模式

核心库执行器 根据执行方法的 参数返回值类型 定义了三种执行模式:

  • 同步 执行

    1. 无参 无返回:
      • IExecutor Build(Action execute);
      • IExecutor Build(Action<Parameters> execute);
    2. 有参 无返回:
      • IExecutor<TArgument> Build<TArgument>(Action<TArgument> execute);
      • IExecutor<TArgument> Build<TArgument>(Action<TArgument, Parameters> execute);
    3. 有参 有返回:
      • IExecutor<TArgument, TResult> Build<TArgument, TResult>(Func<TArgument, TResult> execute);
      • IExecutor<TArgument, TResult> Build<TArgument, TResult>(Func<TArgument, Parameters, TResult> execute);
  • 异步 执行

    1. 无参 无返回:
      • IExecutor Build(Func<CancellationToken, ValueTask> execute);
      • IExecutor Build(Func<Parameters, CancellationToken, ValueTask> execute);
    2. 有参 无返回:
      • IExecutor<TArgument> Build<TArgument>(Func<TArgument, CancellationToken, ValueTask> execute);
      • IExecutor<TArgument> Build<TArgument>(Func<TArgument, Parameters, CancellationToken, ValueTask> execute);
    3. 有参 有返回:
      • IExecutor<TArgument, TResult> Build<TArgument, TResult>(Func<TArgument, CancellationToken, ValueTask<TResult>> execute);
      • IExecutor<TArgument, TResult> Build<TArgument, TResult>(Func<TArgument, Parameters, CancellationToken, ValueTask<TResult>> execute);

以上三种执行模式分别对应了三种 执行管线 IFeaturePipeline,本插件库的 FeaturePipeline (0, 1, 2) 则依次对应了三种执行管线的实现。

由于 Polly8.6.5 版本 在相应策略回调中并没有包含原始执行参数,所以在 BreakerFeature<TArgument>BreakerFeature<TArgument, TResult>Opened 回调函数中的,是无法获得对应 BreakerOpenedArgument<TArgument>.ValueBreakerOpenedArgument<TArgument, TResult>.Value 属性值,其 Closed 回调函数亦同样如此。

由于本插件库重写了 限流回退 两种策略,因此可以在它们的回调方法中获取到原始执行参数的值,即通过 Argument<T>.ValueArgument<T, TResult>.Value 属性。

💡 提示: 限流的 Rejected 回调方法返回 true,表示已经处理完成,即执行器不会再抛出限流被拒绝异常。

其他说明

🚨 注意: 相关回调方法的签名应与执行方法的签名模式一致,因为 Polly 库底层的 ResiliencePipelineBuilderResiliencePipelineBuilder<T> 限制,因为如果不同模式的 IFeaturePipeline 无法构建不兼容的 Features,具体实现请参考:

💡 提示: 根据上述实现,可观察到带返回值的模式不兼容无返回值的两种执行模式 (有参或无参);但无返回值模式中的无参和有参两种执行模式则彼此兼容。

使用范例

请参考本插件库的 samples 范例的 README.md 文档。