Akka Stream Materialized values
- 각각의 operator들은 Source와 Sink와 Flow는 실체화된후 (Materialized) 실체화된 값(Materialized values)을 가지고 있는다.
- 데이터로써 의미가 있는 값일수도 있고 Control를 할수 있는 객체가 실체화되기도 한다.
- Materialized 값에 대한 유지 Operator
- Keep.both()
- 전 Stage의 Value와 현재 Operator의 Value를 둘다 유지한다.
- Keep.left()
- 전 Stage의 Value를 유지한다. 기본값
- Keep.right()
- 현재 Operator의 Value를 유지한다.
Example
// Source는 Integer 데이터가 나오고, 외부에서 컨트롤 할수 있는 CompleteableFuture가 Value로 나온다.
Source<Integer, CompletableFuture<Optional<Integer>>> source = Source.<Integer>maybe();
// throller는 Interger -> Interget, Cancellable
Flow<Integer, Integer, Cancellable> flow = throttler;
// Integer를 받는 Sink, 결과값으로 CompletionStage<Integer>를 리턴한다.
Sink<Integer, CompletionStage<Integer>> sink = Sink.head();
// 기본 설정은 Source의 materialized 값이 유지가 된다. (기존의 stage의 value가 유지가 된다)
RunnableGraph<CompletableFuture<Optional<Integer>>> r1 = source.via(flow).to(sink);
// Keep.right를 통해 flow의 materialized를 value를 선택할수 있다.
RunnableGraph<Cancellable> r2 = source.viaMat(flow, Keep.right()).to(sink);
// Keep.right를 통해 sink의 materialized를 value를 선택을수 있다.
RunnableGraph<CompletionStage<Integer>> r3 = source.via(flow).toMat(sink, Keep.right());
// Keep.both를 이용하면 Source의 Value와 Flow의 Value를 둘다 받을수 있다.
RunnableGraph<Pair<CompletableFuture<Optional<Integer>>, Cancellable>> r7 =
source.viaMat(flow, Keep.both()).to(sink);
'Programing > Akka' 카테고리의 다른 글
Akka Coordinated Shutdown (0) | 2018.12.11 |
---|---|
Akka Actor Hierarchy (0) | 2018.10.22 |
Akka Actor Life Cycle (0) | 2018.10.21 |
Akka Pulling Pattern (0) | 2018.10.13 |
Akka with Spring (0) | 2018.09.29 |