试图学习如何使用Akka.net Streams从Source.Queue并行处理项目,并在Actor中完成处理。
我已经能够通过Sink.ForEachParallel调用函数来使其工作,并且按预期工作。
是否可以与Sink.ActorRefWithAck并行处理项目(因为我希望它利用背压)?
答案 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都会有很长的延迟,以验证背压是否正常工作。