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