gpt4 book ai didi

akka - 如何将多个参与者作为源附加到 Akka 流?

转载 作者:行者123 更新时间:2023-12-04 18:39:18 28 4
gpt4 key购买 nike

我正在尝试构建和运行一个 akka 流(在 Java DSL 中),以 2 个 actor 作为源,然后是一个合并结点,然后是 1 个接收器:

    Source<Integer, ActorRef> src1 = Source.actorRef(100, OverflowStrategy.backpressure());
Source<Integer, ActorRef> src2 = Source.actorRef(100, OverflowStrategy.backpressure());
Sink<Integer, BoxedUnit> sink = Flow.of(Integer.class).to(Sink.foreach(System.out::println));

RunnableFlow<BoxedUnit> closed = FlowGraph.factory().closed(sink, (b, out) -> {
UniformFanInShape<Integer, Integer> merge = b.graph(Merge.<Integer>create(2));
b.from(src1).via(merge).to(out);
b.from(src2).to(merge);
});

closed.run(mat);

我的问题是如何获取对源 Actor 的 ActorRef 引用以便向他们发送消息?在 1 个参与者的情况下,我不会使用图形构建器,然后 .run() 或 runWith() 方法将返回 ActorRef 对象。但是如果源 Actor 很多怎么办?甚至有可能实现这样的流程吗?

最佳答案

回答我自己的问题,以防有人需要。

使用 jrudolph 的建议,我可以使用这样的 Actor (在实际代码中,我做了一些比 2 个 ActorRef 列表更好的事情):

    Source<Integer, ActorRef> src1 = Source.actorRef(100, OverflowStrategy.fail());
Source<Integer, ActorRef> src2 = Source.actorRef(100, OverflowStrategy.fail());
Sink<Integer, BoxedUnit> sink = Flow.of(Integer.class).to(Sink.foreach(System.out::println));

RunnableFlow<List<ActorRef>> closed = FlowGraph.factory().closed(src1, src2, (a1, a2) -> Arrays.asList(a1, a2), (b, s1, s2) -> {
UniformFanInShape<Integer, Integer> merge = b.graph(Merge.<Integer>create(2));
b.from(s1).via(merge).to(sink);
b.from(s2).to(merge);
});

List<ActorRef> stream = closed.run(mat);
ActorRef a1 = stream.get(0);
ActorRef a2 = stream.get(1);

关于akka - 如何将多个参与者作为源附加到 Akka 流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30077766/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com