Page History
...
State Degisn Pattern 이 활용되기도 합니다.
Actor에서는 FSM 유틸리티가 직접적으로 지원되는것은 아니며
become(전이)/unbecome(전이상태제거) 등을 활용하여 FSM 설계가 가능해집니다.
HotSwapActor
Info |
---|
핫스왑은 작동하는 도중 기능을 바꿀수 있는 기능을 의미하며 , 이것은 유연한 메시지 설계에 도움이 되는 기능중 하나입니다.
|
...
Code Block | ||||
---|---|---|---|---|
| ||||
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