Page History
...
이것은 동기적으로 작성된 로컬 로직을 비동기 분산처리로 확장할수 있는 가능성을 열어둘수가 있습니다.
AKKA의 Graph(
...
DSL) 소개
Akka에서는 Graph를 활용하여, Future와 Promice를 더 우아하게 조합하여 흘러보냅니다.(+AkkaStream)
동시성 처리를 위한 이러한 GRAPH-DSL기법은, 언어스펙들이 높아지면서 기본으로 담고 있는경우도 있습니다.
(ex java8에는 없지만, 12에는 이러한 컨셉이 생김 : 실제 확인은 못해보았습니다.)
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); |
- in : 입력은 1~10까지입니다.
- f1 ~f4 : 각 팬을 지날떄마다 +10씩 더합니다.
- bcast : 분기가 일어나는 구간이며, 요소가 분기수만큼 복제가 됩니다.
- merge : 분기된 요소가 다시 집합하는 구간입니다.
- 녹색: 왼쪽에서 오른쪽으로 흐르는 하나의 흐름(혹은 위에서 아래로)
- 노랑: 분기가 갈라지거나 합해지는 구간( bcast : out이 2개 , merger : in 이 2개 )
- 레드: 분기 처리
Link : Working with Graphs
...