Эклекторы конечных автоматов Akka - программирование
Подтвердить что ты не робот

Эклекторы конечных автоматов Akka

Я пытаюсь использовать механизм конечной автомата Akka для моего варианта использования. Я работаю над системой, которая обрабатывает запрос, который проходит через различные состояния.

Запрос здесь - это имя приложения, которое необходимо развернуть вместе с приложением, от которого оно зависит:

Request for application A -> A is in a QUEUED state
Discover A 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

Для этого я инициализирую машину конечного состояния во время обнаружения. Так FSM создается, когда приходит запрос, A 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? Но в этом случае не было бы одного конечного автомата для каждого приложения (данных).

4b9b3361