una maquinas maquina hacer estados estado electronica ejemplos como java scala akka finite-state-machine

java - hacer - maquinas de estado electronica digital



Akka instancias de máquinas de estados finitos (0)

Estoy tratando de aprovechar el marco de la máquina de estados finitos de Akka para mi caso de uso. Estoy trabajando en un sistema que procesa una solicitud que pasa por varios estados.

La solicitud aquí es el nombre de la aplicación que se debe implementar junto con la aplicación de la que depende:

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

Para esto estoy inicializando una máquina de estados finitos en el momento del descubrimiento. Así que el FSM de A se crea cuando llega la solicitud, el FSM de B se inicializa cuando B se descubre de uno de los actores.

¿Inicializo y paso la instancia de FSM a todos los actores y al mismo tiempo le tell la FSM sobre las operaciones que se realizan en los datos para que la máquina de estado pase al estado correcto?

Aquí está la parte relevante de la máquina de estado:

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());

Y aquí hay un ejemplo de uno de los actores que procesa la solicitud:

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) }

¿Es esta la forma correcta de inicializar la máquina de estados y usarla? ¿O debería ocurrir la inicialización en el constructor de ProcessingActor ? Pero en ese caso no habría una máquina de estado por aplicación (datos).