gpt4 book ai didi

java - 如何在 AKKA 的有限状态机中正确传递数据

转载 作者:搜寻专家 更新时间:2023-11-01 00:54:19 25 4
gpt4 key购买 nike

我正在关注 doc 中的这个示例

这是我正在使用的有限状态机的一部分

    startWith(ACCEPTED, new myData());


when(ACCEPTED, matchEvent(someMesage.class, MyData.class,
(someMessage, myData) -> goTo(EVALUATING).replying(EVALUATING)));

onTransition(matchState(ACCEPTED,EVALUATING, () -> {
// Here I want to update the nextState data and pass it to another actor
// But the nextState data is always the unititalized object which is new Mydata() when the FSM initializes


}));
whenUnhandled(matchAnyEvent(
(state, data) -> stay().replying("received unhandled request " + state.toString())));

initialize();
}

如何在状态机的各个状态之间正确传递数据?

对于向这个 FSM actor 发送消息的 actor,actor.tell 调用应该是什么样的

如果我发送以下消息

  MyFSM.tell(new someMessage(myData), getSelf());

它正确匹配了事件并且参与者将状态更改为 EVALUATING 并发回 EVALUATING 消息。但我真正想要的是,根据此状态更改和转换修改“myData”,将此修改后的数据发送给另一个参与者。

但是,当我发送类型为 someMessage 的消息时,我无法发送 myData 的现有实例,并且作为状态机初始化的一部分,它始终未初始化。

换句话说,我正在尝试使用有限状态机管理 myData 的状态。

我怎样才能实现他对框架的最佳利用?

上述信息中的一个工作示例将非常有用!

最佳答案

您可以使用 using 来提供新状态,如下所示:

when(ACCEPTED, matchEvent(someMesage.class, MyData.class,
(someMessage, oldData) -> {
MyData newState = new MyData(); // or transform the old into a new one
return goTo(EVALUATING).using(newState).replying(EVALUATING);
}));

关于java - 如何在 AKKA 的有限状态机中正确传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50277099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com