Program Club

Akka 유한 상태 머신 인스턴스

proclub 2020. 12. 13. 09:54
반응형

Akka 유한 상태 머신 인스턴스


내 사용 사례에 Akka의 유한 상태 머신 프레임 워크를 활용하려고합니다. 다양한 상태를 거치는 요청을 처리하는 시스템에서 작업 중입니다.

여기서 요청은 종속 된 응용 프로그램과 함께 배포해야하는 응용 프로그램 이름입니다.

Request for application A -> A is in a QUEUED state
Discover A's dependency B -> B is in a QUEUED state
B is being processed -> B is in a PROCESSING STATE
A is being processed -> A is in a PROCESSING STATE
B is processed -> B is in a DONE state
A is processed -> A is in a DONE state

이를 위해 나는 발견 시간에 유한 상태 머신을 초기화하고 있습니다. 따라서 A의 FSM은 요청이 들어 오면 생성되고 B의 FSM은 B액터 중 하나에서 발견 되면 초기화됩니다 .

FSM 인스턴스를 초기화하고 모든 행위자에게 전달하는 동시에 tell상태 머신이 올바른 상태가되도록 데이터에서 수행되는 작업에 대한 FSM을 전달합니까?

다음은 상태 머신의 관련 부분입니다.

when(QUEUED, matchEvent(requestAccepted.class, MyApp.class,
    (requestAccepted, service) -> 
    goTo(PROCESSING).replying(PROCESSING)));

when(PROCESSING, matchEvent(completed.class, MyApp.class,
    (completed, service) -> goTo(DONE).replying(DONE)));

// During transitions, save states in the database.
onTransition(matchState(PROCESSING, DONE, () -> {
  nextStateData().setServiceStatus(DONE);
  databaseWriter.tell(nextStateData(), getSelf());

다음은 요청을 처리하는 액터 중 하나의 예입니다.

ProcessingActor extends AbstractActor {

    @Override
      public void onReceive(Object message) throws Throwable {
        if (message instanceof processApplication) {
         // process the app
         // Initialize FSM for the Application
         FSM myFSM = Props.create(MYFSM.class);
         myFSM.tell( new completed(processApplication.app)
    }

이것이 상태 머신을 초기화하고 사용하는 올바른 방법입니까? 또는의 생성자에서 초기화가 발생해야 ProcessingActor합니까? 그러나이 경우 애플리케이션 (데이터) 당 하나의 상태 머신이 없습니다.

참고 URL : https://stackoverflow.com/questions/50681526/akka-finite-state-machine-instances

반응형