我正在尝试将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实例并将其传递给所有参与者,并且同时[FS] [FS0]关于正在对数据执行的操作的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) }
的构造函数中进行初始化?但是在那种情况下,每个应用程序(数据)不会有一个状态机。
我正在尝试将Akka的有限状态机框架用于我的用例。我正在一个处理经过各种状态的请求的系统上。这里的请求是应用程序...
虽然状态和过渡的描述相当模糊,但是可以解决所选实现的状态,其含义以及替代方案的含义。