Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将多个参与者作为源附加到Akka流?_Akka_Akka Stream - Fatal编程技术网

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

如何将多个参与者作为源附加到Akka流?,akka,akka-stream,Akka,Akka Stream,我正在尝试构建和运行一个akka流(在Java DSL中),其中有两个参与者作为源,然后是一个合并连接,然后是一个接收器: Source<Integer, ActorRef> src1 = Source.actorRef(100, OverflowStrategy.backpressure()); Source<Integer, ActorRef> src2 = Source.actorRef(100, OverflowStrategy.backpress

我正在尝试构建和运行一个akka流(在Java DSL中),其中有两个参与者作为源,然后是一个合并连接,然后是一个接收器:

    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);
Source src1=Source.actorRef(100,OverflowStrategy.backpressure());
Source src2=Source.actorRef(100,OverflowStrategy.backpressure());
Sink Sink=Flow.of(Integer.class).to(Sink.foreach(System.out::println));
RunnableFlow closed=FlowGraph.factory().closed(sink,(b,out)->{
uniformfanishape merge=b.graph(merge.create(2));
b、 from(src1).via(merge).to(out);
b、 from(src2).to(merge);
});
关闭。运行(mat);

我的问题是如何获取对源参与者的ActorRef引用,以便向他们发送消息?对于1个actor,我不会使用graph builder,然后.run()或runWith()方法将返回ActorRef对象。但是,如果有许多源角色,该怎么办?甚至有可能实现这样的流程吗?

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

根据jrudolph的建议,我能够使用这样的参与者(在实际代码中,我做了一些比列出2个ActorRefs更好的事情):

Source src1=Source.actorRef(100,OverflowStrategy.fail());
Source src2=Source.actorRef(100,OverflowStrategy.fail());
Sink Sink=Flow.of(Integer.class).to(Sink.foreach(System.out::println));
RunnableFlow closed=FlowGraph.factory().closed(src1,src2,(a1,a2)->Arrays.asList(a1,a2),(b,s1,s2)->{
uniformfanishape merge=b.graph(merge.create(2));
b、 从(s1).通过(合并).到(汇);
b、 从(s2)到(合并);
});
列表流=关闭。运行(mat);
ActorRef a1=stream.get(0);
ActorRef a2=stream.get(1);

您需要将需要访问物化值的元素传递到
closed
,然后提供一个组合物化值的函数。类似这样:
closed(src1,src2,(actorRef1,actorRef2)->包含两个参数(b,s1,s2)->……)的东西。