Rust 异步拦截器(aspect / pipeline)模型,以及在其之上构建的任务编排库(fallback / sequence / parallel)。
- 通用拦截器:每次调用都会产生整条管线的拷贝,拦截器自身不保存状态。
- 函数式存储模型:状态只能在
AspectContext中流转,除 context 外所有拦截器保持幂等。 - 高阶设计:将
add => 1, 2, 3折叠为Z1(Z2(Z3(next)))(context)的洋葱式调用链。
| Crate | 内容 |
|---|---|
pipeline |
内核:Pipeline / Item / INextItem / AspectContext |
samples |
在内核之上构建的任务流:StrategicTaskFlow、SequenceTask、ParallelTask、Fallback |
use pipeline::{AspectContext, INextItem, Item, NextItem, Pipeline, PipelineResult};
#[derive(Clone)]
struct LogTask;
#[async_trait::async_trait]
impl Item<()> for LogTask {
async fn invoke(
&self,
next: &Box<NextItem<()>>,
ctx: &mut AspectContext<()>,
) -> PipelineResult<()> {
println!("before");
next.invoke_next(ctx).await?;
println!("after");
Ok(())
}
}
let mut line = Pipeline::default();
line.use_raw_item(LogTask);
line.invoke_next(&mut AspectContext::new(())).await?;更完整的任务编排示例见 TaskFlow sample。