Akka.net-具有并行性,反压和ActorRef的流

时间:2018-12-17 01:22:06

标签: akka-stream akka.net

试图学习如何使用Akka.net Streams从Source.Queue并行处理项目,并在Actor中完成处理。

我已经能够通过Sink.ForEachParallel调用函数来使其工作,并且按预期工作。

是否可以与Sink.ActorRefWithAck并行处理项目(因为我希望它利用背压)?

1 个答案:

答案 0 :(得分:0)

当试图将以前的尝试和中提琴结合起来时,要按Post!

当我尝试在其中创建actor时,使用ForEachParallel进行的先前尝试失败,但是在异步函数中无法执行。如果我使用先前声明的单个actor,则Tell可以工作,但无法获得所需的并行性。

我知道它可以与具有轮询配置的路由器一起使用。

var props = new RoundRobinPool(5).Props(Props.Create<MyActor>());
var actor = Context.ActorOf(props);

flow = Source.Queue<Element>(2000,OverflowStrategy.Backpressure)            
.Select(x => {
 return new Wrapper() { Element = x, Request = ++cnt };
})
.To(Sink.ForEachParallel<Wrapper>(5, (s) => { actor.Tell(s); }))
.Run(materializer);

Request ++ cnt用于控制台输出,以验证是否按需处理了请求。

每10个请求中的MyActor都会有很长的延迟,以验证背压是否正常工作。