Versions Compared

Key

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

...

이것은 동기적으로 작성된 로컬 로직을 비동기 분산처리로 확장할수 있는 가능성을 열어둘수가 있습니다.


AKKA의 Graph(

...

DSL) 소개

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

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

(ex java8에는 없지만, 12에는 이러한 컨셉이 생김 : 실제 확인은 못해보았습니다.)

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);


  • in : 입력은 1~10까지입니다.
  • f1 ~f4 : 각 팬을 지날떄마다 +10씩 더합니다.
  • bcast : 분기가 일어나는 구간이며, 요소가 분기수만큼 복제가 됩니다.
  • merge : 분기된 요소가 다시 집합하는 구간입니다. 
  • 녹색: 왼쪽에서 오른쪽으로 흐르는 하나의 흐름(혹은 위에서 아래로)
  • 노랑: 분기가 갈라지거나 합해지는 구간(  bcast : out이 2개 , merger : in 이 2개 )
  • 레드:  분기 처리


Link : Working with Graphs

...