Versions Compared

Key

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

...

State Degisn Pattern 이 활용되기도 합니다.

Actor에서는 FSM 유틸리티가 직접적으로 지원되는것은 아니며

become(전이)/unbecome(전이상태제거) 등을 활용하여 FSM 설계가 가능해집니다.


HotSwapActor

Info

핫스왑은 작동하는 도중 기능을 바꿀수 있는 기능을 의미하며 , 이것은 유연한 메시지 설계에

도움이 되는 기능중 하나입니다.

  • 현재 감정 상태에따라 다른 반응을 한다.
  • foo 를 받으면 화를 내는 상태가 된다.
  • bar를 받으면 행복한 상태가된다.
  • 감정의 변화가 일어나는 조건을 전이라고 한다.
  • 이미 화난상태이거나 행복한 상태일때 다른 메시지 처리를 한다.


...

Code Block
languagejava
themeEmacs
public class Swapper extends AbstractLoggingActor {
  @Override
  public Receive createReceive() {
    return receiveBuilder()
      .matchEquals(Swap, s -> {
        log().info("Hi");
        getContext().become(receiveBuilder().
          matchEquals(Swap, x -> {
            log().info("Ho");
            getContext().unbecome(); // resets the latest 'become' (just for fun)
          }).build(), false); // push on top instead of replace
      }).build();
  }
}

public class SwapperApp {
  public static void main(String[] args) {
    ActorSystem system = ActorSystem.create("SwapperSystem");
    ActorRef swapper = system.actorOf(Props.create(Swapper.class), "swapper");
    swapper.tell(Swap, ActorRef.noSender()); // logs Hi
    swapper.tell(Swap, ActorRef.noSender()); // logs Ho
    swapper.tell(Swap, ActorRef.noSender()); // logs Hi
    swapper.tell(Swap, ActorRef.noSender()); // logs Ho
    swapper.tell(Swap, ActorRef.noSender()); // logs Hi
    swapper.tell(Swap, ActorRef.noSender()); // logs Ho
    system.terminate();
  }
}

상태의 저장까지 책임지는 영속성 Part에서는 FSM을 조금더 유연하게 활용가능합니다.

이것은 나중에 영속성 Part를 먼저 살표보고 FSM을 다시한번 설명예정입니다.

참고 : https://doc.akka.io/docs/akka/current/persistence.html#persistent-fsm