Akka有限状态机实例

问题描述 投票:65回答:1

我正在尝试将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的有限状态机框架用于我的用例。我正在一个处理经过各种状态的请求的系统上。这里的请求是应用程序...

java scala akka state-machine
1个回答
0
投票

虽然状态和过渡的描述相当模糊,但是可以解决所选实现的状态,其含义以及替代方案的含义。

© www.soinside.com 2019 - 2024. All rights reserved.