Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

액터의 메시징 시스템을 블락킹하지 않고 Task에 실행을 위임한후 동시성처리를 진행한후 

액터메시지의 블락킹없이 그 결과를 다시 전송받을수 있습니다.


AKKA의 Graph(DSL) 소개

Akka에서는 Graph를 활용하여, Future와 Promice를 더 우아하게 조합하여 흘러보냅니다흘려보냅니다.(+AkkaStream)

AkkaStream처리 방식이며  동시성 처리를 위한 이러한 GRAPH-DSL기법은, 언어스펙들이 높아지면서 기본으로 담고 있는경우도 있습니다.

(ex java8에는 없지만, 12에는 이러한 컨셉이 생김 : 실제 확인은 못해보았습니다. java8에서는 이러한 GraphStream방식을 akka를 통해서 복잡한 동시성처리를 Graph로 설계할수 있습니다.)

Code Block
themeEmacs
titleCode
collapsetrue
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);

...