Page History
...
이것은 동기적으로 작성된 로컬 로직을 비동기 분산처리로 확장할수 있는 가능성을 열어둘수가 있습니다.
...
더 복잡한 비동기의 스트림처리가 필요할시
화이트보드에 그린 메시지 처리를 코드화하는
AKKA Graph Stream을 사용할수가 있습니다.
AKKA의 Graph(DLS) 소개
Akka에서는 Graph를 활용하여, Future와 Promice를 더 우아하게 조합하여 흘러보냅니다.(+AkkaStream)
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