Programing/Akka

Akka Stream Materialized values

BUST 2018. 11. 24. 16:28

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