Page History
...
액터의 메시징 시스템을 블락킹하지 않고 Task에 실행을 위임한후 동시성처리를 진행한후
액터메시지의 블락킹없이 그 결과를 다시 전송받을수 있습니다.
AKKA의 Graph(DSL) 소개
Akka에서는 Graph를 활용하여, Future와 Promice를 더 우아하게 조합하여 흘러보냅니다흘려보냅니다.(+AkkaStream)
AkkaStream처리 방식이며 동시성 처리를 위한 이러한 GRAPH-DSL기법은, 언어스펙들이 높아지면서 기본으로 담고 있는경우도 있습니다.
(ex java8에는 없지만, 12에는 이러한 컨셉이 생김 : 실제 확인은 못해보았습니다. java8에서는 이러한 GraphStream방식을 akka를 통해서 복잡한 동시성처리를 Graph로 설계할수 있습니다.)
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
actorSystem = ActorSystem.Create("ServiceB"); materializer = actorSystem.Materializer(); var g = RunnableGraph.FromGraph(GraphDsl.Create(builder => { var source = Source.From(Enumerable.Range(1, 10)); var sink = Sink.Ignore<int>().MapMaterializedValue(_ => NotUsed.Instance); var sinkConsole = Sink.ForEach<int>(x=>Console.WriteLine(x.ToString())) .MapMaterializedValue(_ => NotUsed.Instance); var broadcast = builder.Add(new Broadcast<int>(2)); var merge = builder.Add(new Merge<int>(2)); var f1 = Flow.Create<int>().Select(x => x + 10); var f2 = Flow.Create<int>().Select(x => x + 10); var f3 = Flow.Create<int>().Select(x => x + 10); var f4 = Flow.Create<int>().Select(x => x + 10); builder.From(source).Via(f1).Via(broadcast).Via(f2).Via(merge).Via(f3).To(sinkConsole); builder.From(broadcast).Via(f4).To(merge); return ClosedShape.Instance; })); g.Run(materializer); |
...