Akka экземпляры конечного автомата - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь использовать среду конечного автомата 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

Для этого я инициализирую конечный автомат во время открытия.Итак, FSM A создается при поступлении запроса, FSM B инициализируется при обнаружении B от одного из участников.

Я инициализирую и передаю экземпляр FSM ввсе действующие лица и одновременно tell ФСМ об операциях, выполняемых с данными, чтобы конечный автомат перешел в правильное состояние?

Вот соответствующая часть конечного автомата:

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?Но в этом случае не будет один конечный автомат для приложения (данных).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...